在一本书中,是这样说的:
那么你怎么知道一个对象什么时候拥有,由谁拥有呢?考虑以下示例:
NSString *str = [[NSString alloc] initWithString:@”Hello”]; NSString *str2 = str;在此示例中,您使用
alloc关键字 forstr,因此您拥有str。因此,您需要在不再需要它时释放它。但是,str2只是指向str,因此您不拥有str2,这意味着您使用完后无需释放str2它。
我认为所有权是对象,而不是变量或指针......所以我们不能说我们“拥有str”或“拥有”......我们拥有一个由orstr2指向的对象,如果我们使用or ,都是一样的。strstr2[str release][str2 release]
另一种描述是:
例如,考虑上一节中使用的示例:
NSString *str = [[NSString alloc] initWithString:@”Hello”]; NSString *str2 = str; [str release]; [str2 release]; //---this is not OK as you do not own str2---尝试释放
str2将导致运行时错误,因为您无法释放不属于您的对象。
[str2 release]如果之前调用了它,我们实际上可以使用 它[str release]。如果我们这样做,那么该行将[str release]导致错误,因为 nowstr和str2都是悬空指针,并且假设release第一次发送到对象时,引用计数变为 0,并dealloc立即被调用,并且内存被释放由 C 函数free()。
以上是否正确,或者还有其他需要更正的地方?