这可能是一个愚蠢的问题,但我一直在考虑它一段时间没有明显的答案。
我有一个小应用程序,我一直在努力,我的NSMutableArray实例变量有问题。在我向viewDidLoad添加[[NSMutableArray alloc] init]之前,它总是(null)。
我对Objective C世界很陌生,所以我试图了解这个问题。我的印象是,我实例化了我的类,实例变量都被分配了。当我在没有alloc / init的情况下向数组添加项时,它保持为(null),保留计数为0。
有问题的数组被声明为(保留)属性。
如果不清楚,我可以添加代码。
答案 0 :(得分:5)
作为对象的任何实例变量实际上只是初始化为nil(0)的指针。这就是为什么该项不被保留并添加到数组中,因为到nil对象的消息返回nil / 0。
你需要在类的init中分配和初始化对象,然后在dealloc中释放它。
答案 1 :(得分:2)
属性声明中的retain / assign / copy限定符是关于如何在编译器为您合成的getter和setter中管理属性值的内存。 (The documentation详细讨论了它们,并给出了每种类型的示例代码。)
这与您是否为您初始化实例变量完全正交。宣布一个ivar就是为这个价值保留存储空间;对于Objective-C类,这是一个指向实例的指针。运行时将将这些ivars初始化为零,但您仍然需要负责创建要存储在那里的对象。 (在Java或C#等类似语言中也是如此:声明一个Array实例变量只为您提供引用空间,它不会为您创建数组。)