【发布时间】:2011-05-31 10:37:52
【问题描述】:
大家好。我知道有人问过这个问题,但我仍然没有清楚地了解 Objective-C 中的内存管理。我觉得我已经很好地掌握了它,但我仍然想要以下代码的一些正确答案。我有一系列的例子希望有人能澄清一下。
为实例变量设置值:
假设我有一个NSMutableArray 变量。在我的课堂上,当我初始化它时,我需要在上面调用retain 吗?
我做吗
fooArray = [[[NSMutableArray alloc] init] retain];
或
fooArray = [[NSMutableArray alloc] init];
做[[NSMutableArray alloc] init] 是否已经将retain 计数设置为1,所以我不需要调用retain 吗?另一方面,如果我调用一个我知道返回autoreleased 对象的方法,我肯定必须调用retain,对吧?像这样:
fooString = [[NSString stringWithFormat:@"%d items", someInt] retain];
属性:
我询问retain 是因为我对@property 的自动设置器的工作原理有点困惑。
如果我将fooArray 设置为@property 并设置retain,Objective-C 会自动创建以下设置器,对吗?
- (void)setFooArray:(NSMutableArray *)anArray {
[fooArray release];
fooArray = [anArray retain];
}
所以,如果我有这样的代码:self.fooArray = [[NSMutableArray alloc] init];(我相信这是有效代码),Objective-C 会创建一个 setter 方法,该方法在分配给 fooArray 的值上调用 retain。在这种情况下,retain 计数实际上是否为 2?
设置属性值的正确方法:
我知道有关于这个和(可能)辩论的问题,但是设置@property 的正确方法是什么?
这个?
self.fooArray = [[NSMutableArray alloc] init];
还是这个?
NSMutableArray *anArray = [[NSMutableArray alloc] init];
self.fooArray = anArray;
[anArray release];
我很想对这些示例进行一些说明。谢谢!
【问题讨论】:
标签: iphone objective-c ios memory-management