ios开发之内存管理什么时候release
答案:2 悬赏:50 手机版
解决时间 2021-01-17 20:17
- 提问者网友:遁入空寂
- 2021-01-17 16:05
ios开发之内存管理什么时候release
最佳答案
- 五星知识达人网友:行路难
- 2021-01-17 16:18
使用self.的方法赋值的retaincount是对的。@property 关键字的作用是 给实例变量在.h文件里创建一个set/get函数的申明。等同于 你自己在.h文件里面给实例变量写set/get函数申明。@property (nonatomic,retain) UIView *view2;等于-(UIView*)getView2;-(void)setView2:(UIView*)view;在.m文件里的@synthesize关键字就是自动实现set/get函数。retain关键字的作用是,在实现set函数内部,retain当前变量,具体实现是这样:-(void)setView2:(UIView*)view{[_view2 release];_view2 = [view retain];}而self.view2 = tView;等于[self setView2:tview];也就是说,如果不用self.调用实例变量,retain关键字是不起作用的。self.view2 = tView; 之后 其实tView和view2都是同一个对象,只是这个赋值的发操作把tView的retaincount+1了而已。所以当 [tView release]之后,self.view2的retaincount-1。然后当再次给 self.view2赋值的时候,在set内部会再次release。这样是不会有内存泄露的。--------------------------------------------------------------------------------------------------------------在不使用self.的图片里,为什么在 [tView release]之后,retaincount还是1呢?这是因为 [tView release]之后, tView retaincount实际变成了0,然后tView 就被释放掉了。你后面调用tView.retainCount其实是没意义的,tView已经被释放了。所以你看到的1其实是,retainCount,retainCount2这2个变量前面被赋值的值。你如果改成赋值给一个新的变量,你就会发现是0了。而这个0其实是新的变量的初始化的值0,并不是tView.retainCount返回的0。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯