我用Xcode将项目切换到ARC。他确实删除了release
命令,但我已经拥有的数组 - 没有property
- 并且Xcode在转换后没有将它添加到它们中。
我是否必须将property
设置为NSMutableArray
?
.h
NSMutableArray *array;
.m
array= [[NSMutableArray alloc] init ];
我试图避免它的原因,它是如此烦人,添加它而不是添加同步它,它似乎太老了。我只想设置和数组,然后继续。没有太多搞乱它。我认为大多数人不需要那么复杂,他们只需要一个简单的数组,而不用考虑它的强弱,弱,同步它等等。
答案 0 :(得分:2)
默认情况下,ivars很强,然后你不会被迫添加属性。但是财产非常有用,我建议你经常使用它们。
您可以使用属性,也不必强制添加合成。你可以这样做: 在.h
@property (nooatomic, strong) NSMutableArray *array;
编译器会在没有合成的情况下为你生成getter和setter。
在.m中,在init中使用对ivar的直接访问(如果有的话,使用自定义init)并在其他地方使用属性。
例如,在.m中:
- (id)init{
self = [super init];
if(self){
_array = ...
}
return self;
}
你.m中的其他地方直接使用setter和getter:
- (void)myMethod{
self.array = ...
}
答案 1 :(得分:1)
如果我确实理解了你的问题 - 那就没有任何问题。保持原样。来自iVar的参考很强。因此,您的数组将保留,直到您设置array=nil
(当然不包含任何其他stron引用)。
但是,为了保持简单并使用OO概念的优点,我倾向于在.m文件的第二个接口部分中创建iVars作为属性。不过,这可能取决于个人风格。简单的iVars也有优势。当你对它们感到舒服时,坚持下去。
在这种将legady代码迁移到ARC的情况下,将iVar转换为属性(或将属性声明添加到现有iVar)没有太多合理的理由。
答案 2 :(得分:0)
实例变量在类中声明,其中该类的每个实例都获得自己声明的实例变量的副本。
此外,您无需将所有实例变量转换为属性。
属性实际上只是一个类为某些访问器提供某些语义的承诺。只有一个实例变量并不意味着你必须为那个ivar提供访问器。
请点击以下链接了解更多详情示例: -