【发布时间】:2011-03-13 21:32:32
【问题描述】:
我知道这已经被讨论过了,但我只是没有得到一些内存管理。我知道保留使对象保持活动状态,而副本则为对象提供了单独的副本。
当谈到 ivars 和属性时,我不明白的是,作为属性保留意味着 setter 释放旧值并保留新值:
property = newValue;
// retain
if (property != newValue)
{
[property release];
property = [newValue retain];
}
但我已经看到了将静态字符串分配给保留属性 ivars 的示例,例如
self.stringProperty = @"something";
(some other code)
self.stringProperty = @"somethingElse";
第二次调用set string应该对静态字符串调用release,这是不允许的,为什么程序不会崩溃?
另外,如果一个对象是用retain属性声明的,然后用init分配一些东西,例如
@property(retain)someArray;
someArray = [[NSArray alloc] initWithArray:arbArray];
这是否意味着 someArray 现在的保留计数为 2 但如果它是用创建的
someArray = [NSArray arrayWithArray:arbArray];
因为第二个是工厂方法,所以保留计数只有 1?
【问题讨论】:
-
对不起,我的意思是两个样本中的 self.someArray。
标签: objective-c memory-management nsstring nsarray nsobject