Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.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 - Fatal编程技术网

为什么Objective-C属性有点不方便?

为什么Objective-C属性有点不方便?,objective-c,Objective C,这与其说是一个问题,不如说是一个抱怨,尽管也许有人对此有一些好的看法。所以基本上,如果你想在Objective-C类中有一个ivar,你必须提到它三次 SomeClass* _ivar; @property (nonatomic,retain/assign/copy) SomeClass* ivar; @synthesize ivar = _ivar; 也许是第四次用Dealoc方法。因此,如果该方法类似于Java风格的注释——在实际ivar声明之前的某个位置,比如: @property (n

这与其说是一个问题,不如说是一个抱怨,尽管也许有人对此有一些好的看法。所以基本上,如果你想在Objective-C类中有一个ivar,你必须提到它三次

SomeClass* _ivar;
@property (nonatomic,retain/assign/copy) SomeClass* ivar;
@synthesize ivar = _ivar;
也许是第四次用Dealoc方法。因此,如果该方法类似于Java风格的注释——在实际ivar声明之前的某个位置,比如:

@property (nonatomic,retain,synthesize = ivar,dealloc) SomeClass* _ivar; 

这也会生成访问器方法,并且dealloc-告诉您在dealloc方法中dealloc ivar。

实际上您不必声明ivar-如果您只为它们声明属性,就可以合成它们。这应该为您合成名称iVar:(但在遗留运行时不受支持-因此这种看似冗余的语法的原因之一是为了与遗留平台向后兼容)

在新的XCode版本(可能是4.0版)中,您也不需要使用@synthesis-默认情况下将合成属性


正如您所看到的,objective-c的开发满足了您的需求:)

Xcode 4不能自动合成属性。但是使用ARC(自动引用计数),您不再需要担心dealloc和实例变量

你说得对,这与其说是个问题,不如说是个抱怨。
@interface MyClass : NSObject 
{
}

@property(copy) NSString *name;

@end

...
@synthesize name;