Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 是否添加不带实例变量的属性?_Objective C_Properties - Fatal编程技术网

Objective c 是否添加不带实例变量的属性?

Objective c 是否添加不带实例变量的属性?,objective-c,properties,Objective C,Properties,我试图在不创建实例变量的情况下添加属性。有可能这样做吗?或者你能用一种不属于财产的方式做类似的事情吗 例如: @interface RandomClass() @property (nonatomic) int value; @end @implementation RandomClass @synthesize value = _value; // Here I override the default methods @synthesize -(int)value { retu

我试图在不创建实例变量的情况下添加属性。有可能这样做吗?或者你能用一种不属于财产的方式做类似的事情吗

例如:

@interface RandomClass()
@property (nonatomic) int value;
@end

@implementation RandomClass
@synthesize value = _value;
// Here I override the default methods @synthesize
-(int)value
{
      return 8; // Actually I'm returning something more complex, so a "define" won't work
}
-(void)setValue:(int)value
{
   self.someOtherValue = value;
}
在上面的代码中,我没有使用实例变量
\u value
!有没有一种方法可以在不创建变量的情况下执行此操作?

删除该行

@synthesize value = _value;
由于您是自己实现getter/setter,因此
@synthesis
没有帮助



@synthesis
提供两种工作。第一项工作是将属性连接到支持ivar,如果ivar不存在,则合成该ivar。第二项工作是合成getter/setter。如果您不需要支持ivar,并且如果您自己为getter/setter提供实现,那么您根本不需要
@synthesis

@claireware:相反,如果编译器可以看到方法已经实现,那么就不需要
@dynamic
。请参阅:您可以使用
@implementation
块中的
@synthesis
@dynamic
指令来触发特定的编译器操作。请注意,对于任何给定的
@属性
声明,两者都不是必需的。@claireware:Josh是正确的
@dynamic
告诉编译器如果找不到getter/setter,不要担心,因为它们将在运行时提供。如果您打算在编译时提供getter/setter,那么您不需要
@dynamic
(事实上,最好不要使用它,因为如果您忘记实现getter或setter,编译器会对您大喊大叫).@JoshCaswell如果您有
@propertyName
,即使您提供自己的setter/getter,编译器是否仍会创建ivar?LightningStryk:编译器将创建ivar,只要它进行合成。如果实现这两种方法,则不会发生自动合成。如果省略getter或setter(假定为readwrite属性),就会发生这种情况。如果您有一个
@synthesis
行,则明确告诉编译器合成ivar,即使您同时实现了getter/setter。@rounak如果您手动实现getter/setter,则不会合成ivar。只有显式编写
@synthesis
或者让Xcode自动合成getter或setter时,才会合成ivar。