【发布时间】:2011-02-18 11:25:46
【问题描述】:
我是目标 c 的新手。我已经阅读了关于苹果“内存管理规则”的内存管理文档。但是我仍然不太清楚如何管理属性的引用。
对于使用“retain”注释声明的属性,set/get 访问方法的默认实现是什么?
这是我的假设,请给一些cmets。谢谢。
@interface SubClass : NSObject {
NSString * _name;
}
... ...
@property (nonatomic, retain) NSString * name;
... ...
@end
-(NSString *) setName {
return _name;
}
-(void) setName: (NSString *) pName{
// the correct version of default set method for retain
if( _name != pName ) {
[_name release];
_name = [pName retain];
}
}
那么dealloc方法,这样可以吗?
- (void)dealloc {
self.name = nil; // or [_name release], _name = nil;
}
【问题讨论】:
-
作为旁注,您无需在向其发送
release消息之前检查变量是否不为零。在 Objective C 中,您发送给 nil 对象的任何消息都会被忽略。 -
哦,通常的做法是将
NSString属性声明为copy而不是retain,因为它有一个广泛使用的可变子类。如果有人将您的NSString属性设置为NSMutableString子类的实例,他们可以从您的下方更改您的数据。 -
一篇关于objective-c属性语法的好文章。 useyourloaf.com/blog/2011/2/8/…
标签: iphone objective-c ios