-4

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

我是否必须设置propertyNSMutableArray

.h
NSMutableArray *array; 

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

我试图避免它的原因是它太烦人了,添加它而不是添加同步它,它似乎太旧了。我只想设置和排列,然后继续。不要太在意它。我认为大多数人无论如何都不需要那种复杂性,他们只需要一个简单的数组,而不考虑它的强、弱、同步等。

4

3 回答 3

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 = ...
     }
于 2013-10-27T11:36:19.023 回答
1

如果我确实正确理解了您的问题-实际上没有任何问题。保持原样。来自 iVar 的参考很强。因此,您的数组将一直保留,直到您设置array=nil(当然不要持有任何其他 stron 参考)。

然而,为了简单起见并利用 OO 概念的优点,我倾向于在 .m 文件的第二个接口部分中创建 iVar 作为属性。但是,这可能取决于个人风格。简单的 iVar 也有优势。因此,当您对它们感到满意时,请坚持使用它们。

在这种将遗留代码迁移到 ARC 的情况下,没有充分的理由将 iVar 转换为属性(或将属性声明添加到现有 iVar)。

于 2013-10-27T11:45:42.723 回答
0

实例变量在一个类中声明,其中该类的每个实例都有自己的该类声明的实例变量的副本。

此外,您不需要将所有实例变量转换为属性。

属性实际上只是一个承诺,即类为某些访问器提供某些语义。仅仅拥有一个实例变量并不意味着您必须为该 ivar 提供访问器。

请查看以下链接以获取更多详细示例:-

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

于 2013-10-27T12:30:03.283 回答