iphone开发中,在头文件的interface声明里,可以用@property (nonatomic,retain) NSString *blog;来声明一个属性,在objc 1.0里,需要自己写getter setter 方法,在现在的objc2.0里已经简化了。只要在.m文件中头部 @synthesize blog;即可生成blog属性的 getter和setter方法。

一般情况下,属性里的对象变量,在对象释放之前都要保留至少一个得retain Count,否则,不一定什么时候使用属性的时候,属性对象已经被释放了,就出错了。如果,没有使用@synthesize生成setter方法,而是自己对属性赋值,这时候,一般都要对属性对象[obj retain]以后再赋值。(针对通过with初始化的;通过init初始化并autorelease的一样)。

还有一点非常重要,使用中注意,比如上面的类:

如果这样对blog属性赋值,

Blog *iu1ublog = [[Blog alloc] init];

blog = iu1ublog;

[iu1ublog release];

在真正需要blog属性时,会发现blog属性的对象已经被释放了。因为 blog = iu1ublog这一步并没有ratain这个对象的引用计数。

必须用 self.blog = iu1ublog,才说明是对属性赋值,对象才会retain. 直接blog = iu1ublog,是对内部成员变量赋值,不是对属性赋值。

Posted in 未分类 at 10月 9th, 2009. 1 Comment.