我编码的越多,我就越迷失......所以我决定为我(和其他人)创建一个完全致力于内存管理的主题,而不是浪费时间理解 obj-c 基础......我将它更新为提出了新的问题!
好的,下面是一些示例:
// myArray is property (retain)
myArray = otherArray;
//myArray isn't a property
myArray = otherArray;
//myArray is a property (retain)
myArray = [[NSArray alloc] init];
//myArray isn't a property
myArray = [[NSArray alloc] init];
--- 所以,如果我理解……当你放 self.myArray 时,你告诉 Xcode 使用 getter 或 setter,但是当你只做 myArray 时,你负责一切,对吧?
[已解决] UPDATE1:两者之间是否有区别:
//myArray is a property
myArray = otherArray; // it is only a reference, releasing otherArray will imply releasing myArray
self.myArray = otherArray; // otherArray is sent a retain message so releasing otherArray will still keep myArray in memory
--- 是的,有区别(见上面的评论)
[已解决] UPDATE2:下面的 myArray 是否等于 nil ?
NSArray *myArray;
--- Kubi : 是的,它等于 nil。
[已解决] UPDATE3:它是否计入 2 次保留?一个从 self 中保留,一个从 alloc 中保留?这是内存泄漏吗?
self.myArray = [[NSArray alloc] init];
--- Kubi:是的,这是内存泄漏!
[已解决] UPDATE4:物业负责一切?不需要分配或释放?
self.myArray = [NSArray array];
--- 我们这里使用 setter 以便正确保留数组
[已解决] UPDATE5:这两个块相同吗?
//myArray is a retained property
self.myArray = [NSArray array]; //retain
self.myArray = nil; //release and set to nil
myArray = [[NSArray alloc] initWithArray]; //retain
self.myArray = nil; //release and set to nil
--- Kubi : 是的,它们是一样的
谢谢你的时间。
哥提。