penn-wang
一位老和尚,他身边聚拢着一帮虔诚的弟子。这一天,他嘱咐弟子每人去南山打一担柴回来。弟子们匆匆行至离山不远的河边,人人目瞪口呆。只见洪水从山上奔泻而下,无论如何也休想渡河打柴了。无功而返,弟子们都有些垂头丧气。唯独一个小和尚与师傅坦然相对。师傅问其故,小和尚从怀中掏出一个苹果,递给师傅说,过不了河,打不了柴,见河边有棵苹果树,我就顺手把树上唯一的一个苹果摘来了。后来,这位小和尚成了师傅的衣钵传人。

@property (nonatomic, retain) UIView *testView;

@synthesize testView = _testView;

大家都知道,这是系统默认的 setter和getter方法。

其具体实现,如setter:

- (void)setTestView:(UIView *)testView {
    if (testView == _testView) {
        return;
    }
    [_testView release];
    _testView = [testView retain];
}

疑问在这里:

如果调用 self.testView = someView;

进入 setTestView。。当执行 [_testView release];你会发现,_testview==nil  且 _testView.RetainCount==0,仍然可以发送 release。

解释:[_testView release];只是使retainCount-1,况且 retainCount为无符号整形。

so,即使发送了 release, _testView的retaincount仍然为0。没有影响。

 

posted on 2012-12-18 15:18  penn-wang  阅读(128)  评论(0编辑  收藏  举报