为了账号安全,请及时绑定邮箱和手机立即绑定

关于objective-c中的复制对象?

关于objective-c中的复制对象?

holdtom 2019-02-04 10:06:07
关于objective-c中的复制对象
查看完整描述

2 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

如两个对象NSString *str1=[[NSString alloc] initWithString:@"string1"];
NSString *str2=[[NSString alloc] initWithString:@"string2"];
str2=str1; //使指针str2的指向与str1指向相同内存。结果就是造成了上面的alloc下动态分配
的内存,内存泄露.当调用[str1 release]; [str2 release];内存的释放最终调用的是[str1 dealloc];
或者是[str2 dealloc],什么情况下才会调用这个释放内存的dealloc方法呢?当创建的对象其引用计数(retainCount)为0时,就会调用。
而哪些方法会造成引用计数改变呢?
1.调用alloc方法
2.调用copy,retain 特性
3.relase方法
str2=[str1 copy]; 引用计数加1,所以当调用[str1 release];时str2与str1指向的共同对象并未析构,就是还存在。如果用直接复制str2=str1就不存在了。
引用计数变化为: 1.调用alloc使引用计数加1,变为了1.
2.调用copy,引用计数加1,变为2.
3.调用release,引用计数减1,变为1; 所以引用计数不为0,不会调用dealloc释放内存
的函数,所以内存还存在,如果要释放内存,必须再release一次。
所以这才是两者之间根本区别。
用C语言解释就是,新分配一块内存空间来存储要复制的值。



查看完整回答
反对 回复 2019-03-15
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

对于引用类型,b=a只是将b对象的指针指向a ,a,b同时指向一块内存地址。当其中一个对象改变时,另一个对象也会更着改变

查看完整回答
反对 回复 2019-03-15
  • 2 回答
  • 0 关注
  • 618 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信