gpt4 book ai didi

iphone - 正确覆盖 Objective-C 中的 setter

转载 作者:IT王子 更新时间:2023-10-29 08:08:10 24 4
gpt4 key购买 nike

我只是试图覆盖属性的标准合成 setter 。到目前为止一切都很好,我只是将 ivar 设置为我的新值。但后来我问自己“保留属性的保留计数会发生什么”……我找不到很好的答案来向我解释这一点。所以我在这里问。如果我覆盖设置为 retain 的属性 setter ,我有什么需要注意的吗?我该如何正确地做到这一点?我不使用 ARC。

这是一个例子:

@property(nonatomic)NSInteger number;

- (void)setNumber:(NSInteger)number {
_number = number; // This should be fine, since it's no retained object I want to set
}


@property(nonatomic, retain)NSObject *something;

- (void)setSomething:(NSObject *)something {
_something = something; // This is not fine. As far as I know you should never do sth. like this... But how do I set it correctly?
}

最佳答案

-(void) setAnObject:(NSObject*) someObject {
if (_anObject != someObject) {
NSObject* savedObject = _anObject;
_anObject = [someObject retain];
[savedObject release];
}
}

如果您在保留新指针之前释放旧指针,您可能会遇到这样一种情况,即您从旧对象中的值设置值,而旧对象的释放导致新对象变得糟糕!就在它被保留之前。

或者,你可以这样做

....
[someObject retain];
[_anObject release];
_anObject = someObject;
...

关于iphone - 正确覆盖 Objective-C 中的 setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12369787/

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