可以从getter返回属性副本吗?

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)

在我的应用程序中,我必须做很多事情

Article *article= [objectsArray getObjectAtIndex:x];
NSString *title=article.title;
UILabel.text=title;
[title release];
Run Code Online (Sandbox Code Playgroud)

我知道当我拿到房产时我应该叫保留:

NSString *title=[article.title retain];
Run Code Online (Sandbox Code Playgroud)

也许我懒得去保留我得到的地方.或者如果我需要在整个应用程序中执行数十次.

我可以得到一份副本吗?

- (NSString *)title {
    return [title copy];
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*ong 7

在某些情况下,出于安全原因,我更愿意退回该物业的副本.例如,如果我正在编写一个具有唯一标识符属性的类,那么我将"返回[[_uniqueID copy] autorelease]",以便其他类不可能对唯一标识符执行任何操作.其他时候我只会返回对象本身,因为如果外部操作它并不是什么大问题.

此外,对于这些getter方法,它们不应该返回具有+1保留计数的对象(这就是你要去的).如果有的话,他们应该直接返回对象或者返回+0保留计数(保留/复制+自动释放).它大大简化了你的内存管理,就这样做了.如果外部对象需要保留返回的对象,那么外部对象应该负责保留它所需的任何内容.