A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李国华 中级黑马   /  2015-3-24 10:52  /  1342 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看到循环retain与@class的视频,其中讲到两端循环引用的解决方案,一端引用retain,一端引用assign。代码如下:(Person与Card两个类)
  1. @class Card;
  2. @interface Person : NSObject
  3. @property (nonatomic,retain) Card *card;
  4. @end
复制代码

  1. @class Person;
  2. @interface Card : NSObject
  3. @property (nonatomic,assign) Person *person;
  4. @end
复制代码


但是之前有提到retain适用于OC对象,assign适用于非OC对象,显然person也是OC对象,这样是不是跟之前讲的矛盾啊?我自己理解的不够深刻,烦请各位战友给我指导一下吧,非常感谢!:loveliness:

3 个回复

倒序浏览
这里如果都是用retain,在主函数里就需要用两次的release,然后会调用两次dealloc,当Person 和Card,相互引用的时候,计数器无法释放,只能通过一段用assign直接赋值的方法,至于参数处可以用assign,我个人觉得是@class在文件
回复 使用道具 举报
至于参数处可以用assign,我个人理解为时在@class Person文件里的特殊语法,只在两端循环的时候才这样
回复 使用道具 举报
可以理解为互相引用是个例外,其他的则遵循原来的原则
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马