iphone开发:关于@property中retian的一点理解
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,是对内部成员变量赋值,不是对属性赋值。
10月 14th, 2009 at 16:51 #nfl jerseys
good 找了很久了。。。。