苹果adc文章
stepwise 的文章
example 1: set method:
- (void)setTitle:(NSString *)newTitle
{
[title autorelease];
title = [newTitle copy];
}
example 2: copy
NSMutableString *foo = [NSMutableString stringWithCString:"foo"];
[myWindow setTitle:foo];
[foo appendString:@"bar"];
例1 中将传递过来的newTitle 被copy , 而不是 retain, 因为只想要一个nsstring 对象的拷贝,而不是要共享他,
title 先被release , 因为title 指向了一个NSString 对象, 如果不autorelease,将失去这个对象。一旦title 被指向新的NSString, 就无法再释放 title 原来的数值。
还有,是 autorelease, 而不是release. 否则, title 还没有来得及被设为新的值, 就被释放既指向垃圾。
例3
{
/* ... */
title = [myWindow title];
[myWindow setTitle:newTitle];
/*...*/
// 原来的title 现在已经是垃圾,因为他在 setTitle 方法里已经被释放了。
}
stepwise 的文章
accessor methods
example 1: set method:
- (void)setTitle:(NSString *)newTitle
{
[title autorelease];
title = [newTitle copy];
}
example 2: copy
NSMutableString *foo = [NSMutableString stringWithCString:"foo"];
[myWindow setTitle:foo];
[foo appendString:@"bar"];
-
To copy 还还还还or to retain?
value objects - 对象封装了离散的,有限的数据, 如 NSNumbers ,NSStrings.
copy - 需要对象的快照 snapshot 给自己。
retain-需要共享对象时。
entity objects - 对象很大,而且有下层对象。 如 NSView, NSWindow.
retain- 永远。
Value Object entity object copy 需要对象的快照 snapshot 给自己。对象必须符合 NSCopying 协议。
n/a retain
需要共享对象时
永远
例1 中将传递过来的newTitle 被copy , 而不是 retain, 因为只想要一个nsstring 对象的拷贝,而不是要共享他,
title 先被release , 因为title 指向了一个NSString 对象, 如果不autorelease,将失去这个对象。一旦title 被指向新的NSString, 就无法再释放 title 原来的数值。
还有,是 autorelease, 而不是release. 否则, title 还没有来得及被设为新的值, 就被释放既指向垃圾。
例3
{
/* ... */
title = [myWindow title];
[myWindow setTitle:newTitle];
/*...*/
// 原来的title 现在已经是垃圾,因为他在 setTitle 方法里已经被释放了。
}