猿问

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

关于objective-c中的复制对象


holdtom
浏览 660回答 2
2回答

婷婷同学_

如两个对象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语言解释就是,新分配一块内存空间来存储要复制的值。

慕田峪4524236

对于引用类型,b=a只是将b对象的指针指向a ,a,b同时指向一块内存地址。当其中一个对象改变时,另一个对象也会更着改变
随时随地看视频慕课网APP
我要回答