本帖最后由 SailY 于 2014-9-13 21:21 编辑
先上代码把: - (void)setBook:(Book *)book { if (book != _book) { // 对之前的书做一次release操作 [_book release]; // 对新书做一次retain操作 _book = [book retain]; } } 这是一个setter方法, 当main.m函数里 // p1想占用b这本书,[p1 setBook:b]; p1.book = b1; p1.book = b2; // p将书从b1换成b2,并没有对原来的书进行释放操作,所以加个[_book release];对b1进行释放。
我的问题是: if (book != _book)这个判断有必要吗?这里的_book就是b1,即使 p1.book = b1; p1.book = b1; 重复赋值,也没问题啊,反正对原来的旧书做了 release操作
|