使用ARC确实NSMutableArray需要属性吗?

时间:2013-10-27 11:23:39

标签: objective-c

我用Xcode将项目切换到ARC。他确实删除了release命令,但我已经拥有的数组 - 没有property - 并且Xcode在转换后没有将它添加到它们中。

我是否必须将property设置为NSMutableArray

.h
NSMutableArray *array; 

.m
array= [[NSMutableArray alloc] init ];

我试图避免它的原因,它是如此烦人,添加它而不是添加同步它,它似乎太老了。我只想设置和数组,然后继续。没有太多搞乱它。我认为大多数人不需要那么复杂,他们只需要一个简单的数组,而不用考虑它的强弱,弱,同步它等等。

3 个答案:

答案 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提供访问器。

请点击以下链接了解更多详情示例: -

https://developer.apple.com/library/ios/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011226-CH1-SW16