Rod*_*Rod 2 memory-management properties objective-c
我有以下简单的课程:
@interface Article: NSObject {
NSString *title;
}
@property (copy, nonatomic) NSString *title;
@end
@implementation
- (void)setTitle:(NSString *)aString {
if ((!title && !aString) || (title && aString && [title isEqualToString:aString])) return;
dirty = YES;
[title release];
title = [aString copy];
}
- (NSString *)title {
return title;
}
@end
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,我必须做很多事情
Run Code Online (Sandbox Code Playgroud)Article *article= [objectsArray getObjectAtIndex:x]; NSString *title=article.title; UILabel.text=title; [title release];
我知道当我拿到房产时我应该叫保留:
NSString *title=[article.title retain];
Run Code Online (Sandbox Code Playgroud)
也许我懒得去保留我得到的地方.或者如果我需要在整个应用程序中执行数十次.
我可以得到一份副本吗?
- (NSString *)title {
return [title copy];
}
Run Code Online (Sandbox Code Playgroud)
在某些情况下,出于安全原因,我更愿意退回该物业的副本.例如,如果我正在编写一个具有唯一标识符属性的类,那么我将"返回[[_uniqueID copy] autorelease]",以便其他类不可能对唯一标识符执行任何操作.其他时候我只会返回对象本身,因为如果外部操作它并不是什么大问题.
此外,对于这些getter方法,它们不应该返回具有+1保留计数的对象(这就是你要去的).如果有的话,他们应该直接返回对象或者返回+0保留计数(保留/复制+自动释放).它大大简化了你的内存管理,就这样做了.如果外部对象需要保留返回的对象,那么外部对象应该负责保留它所需的任何内容.