【发布时间】:2020-01-21 09:59:16
【问题描述】:
根据苹果开发者网站:Practical Memory Management,在retain属性的自定义set方法的实现如下:
@interface Counter : NSObject
@property (nonatomic, retain) NSNumber *count;
@end;
- (void)setCount:(NSNumber *)newCount {
[newCount retain];
[_count release];
// Make the new assignment.
_count = newCount;
}
但许多网站建议第一步应该是发布。比如这个问题:objective c - Explicit getters/setters for @properties (MRC) - Stack Overflow,答案给出了另一种实现。
- (void)setCount:(NSNumber *)count {
if (count != _count) {
NSNumber *oldCount = _count;
// retain before releasing the old one, in order to avoid other threads to
// ever accessing a released object through the `_count` pointer.
_count = [count retain];
// safely release the old one.
[oldCount release];
}
}
所以我怀疑这两种实现之间的区别。 首选哪一个?为什么?
感谢您的关注和回答。
【问题讨论】:
-
可能只是开启了ARC?
-
您对为什么有些网站建议先发布有意见吗?在你的第二个 sn-p
release之后也调用retain -
ARC 遵循第二个 sn-p (包括另一个答案中提到的测试)。自己决定这是否使它成为“首选”。
-
@Cy-4AH 这是一个建议先发布的网站。 stackoverflow.com/questions/5040702/…
标签: objective-c memory-management