gpt4 book ai didi

objective-c - 可以从 getter 返回一份属性(property)副本吗?

转载 作者:行者123 更新时间:2023-12-04 03:20:42 25 4
gpt4 key购买 nike

我有以下简单的类(class):

@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

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

Article *article= [objectsArray getObjectAtIndex:x];
NSString *title=article.title;
UILabel.text=title;
[title release];

我知道我应该在获得属性时调用 retain:

NSString *title=[article.title retain];

也许我懒得保留我得到的属性(property)。或者如果我需要在整个应用程序中执行数十次。

我可以让 getter 返回副本吗?

- (NSString *)title {
return [title copy];
}

最佳答案

在某些情况下,出于安全原因,我更愿意退还属性(property)的副本。例如,如果我正在编写一个具有唯一标识符属性的类,那么我将“返回 [[_uniqueID copy] autorelease]”,这样另一个类就不可能对唯一标识符做任何事情。其他时候我只会返回对象本身,因为如果它是从外部操作的,这没什么大不了的。

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

关于objective-c - 可以从 getter 返回一份属性(property)副本吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1138293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com