OC Copy and MutableCopy的使用】的更多相关文章

#import <Foundation/Foundation.h> @interface Student : NSObject <NSCopying> // copy代表set方法会release旧对象.copy新对象 // 修改外面的变量,并不会影响到内部的成员变量 // 建议:NSString一般用copy策略,其他对象一般用retain @property (nonatomic, copy) NSString *name; + (id)studentWithName:(NSS…
copy与mutableCopy都是深拷贝,区别是mutableCopy拷贝出的对象是可变的. OC对象基本都是通过指针访问,所以一般情况下,通过对指针的赋值都是浅拷贝,即只是拷贝了一份对象的指针,对象还是只有一个. 例: NSMutableString *str = [NSMutableString stringWithString:@"abc"]; NSString *str2 = str; str与str2指向的是同一个对象,str变了str2随之改变. NSMutableArr…
对象拷贝主要由两种方式:copy和mutableCopy.浅拷贝是指直接将指针指向原有的地址,从而达到复制的目的.深拷贝是指重新生成一个对象,将原有对象的内容复制到新的对象中.copy 返回的是一个不可变的对象,mutableCpoy返回的是一个可变的对象,但是由于OC的弱语法特性,即使如下使用编译器也不会报错.但是再运行时,arrayCopy会找不到具体的方法,报错. NSMutableArray *arrayCopy=[muArray copy]; copy当所引用的对象是可变的时,则是深拷…
 首先,什么是copy? Copy的字面意思是“复制”.“拷贝”,是一个产生副本的过程. 常见的复制有:文件复制,作用是利用一个源文件产生一个副本文件. 特点:1.修改源文件的内容,不会影响副本文件: 2.修改副本文件的内容,不会影响源文件. OC中copy的作用是:利用一个源对象产生一个副本对象 特点:1.修改源对象的属性和行为,不会影响副本对象: 2.修改副本对象的属性和行为,不会影响源对象.  如何使用copy功能? 一个对象可以调用copy或mutableCopy方法来创建一个副本对象.…
面试过程中经常被问到ARC中Strong.Copy的区别是什么.普通的回答是:一样.文艺(正确)的回答是:分情况(我擦!WQY#$&Y**%OWEUR) 可以先参考这篇文章http://www.cnblogs.com/lihaiyin/p/4647426.html 问题一:到底用Copy还是Strong 1. 把不可变对象写成Copy:   如果把不可变对象赋值给此属性,内存中其实就是retain了一下. 如果把可变对象赋值给此属性,会生成新的不可变对象,避免值的变化 2. 把不可变对象写成St…
Objective - C 中有很多在日常项目中经常用到的常用代码,在这里着重的讲一下关于copy 和 mutableCopy 的区别以及相关用法. Objective - C 中可变对象和不可对象经常用的如下: NSString. NSMutableString | NSArray.NSMutableArray, 分开说: A:NSString. NSMutableString 二者的copy方法返回类型为: [NSString copy]                         浅拷…
集合(NSArray,NSSet,NSDictionary等)使用copy与mutableCopy的区别是类似的,下面以NSMutableArray.NSArray 为例子验证如下: NSMutableArray *arrayM=[NSMutableArray arrayWithObjects:@"hello",@"word", nil]; id objM=[arrayM mutableCopy]; id obj=[arrayM copy]; NSLog(@&quo…
前言 copy:需要先实现 NSCopying 协议,创建的是不可变副本. mutableCopy:需要实现 NSMutableCopying 协议,创建的是可变副本. 浅拷贝:指针拷贝,源对象和副本指向的是同一个对象.对象的引用计数器 +1,其实相当于做了一次 retain 操作. 深拷贝:内容拷贝,源对象和副本指向的是两个不同的对象.源对象引用计数器不变,副本计数器设置为 1. 只有不可变对象创建不可变副本(copy)才是浅拷贝,其它都是深拷贝. 在 iOS 中并不是所有的对象都支持 cop…
NSString: //main.m #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSString *str1 = @"aaa"; NSString *str2 ; NSString *str3 ; NSString *str4 ; NSString *str5 ; NSString *str6 ; str2 = [NSStrin…
NSArray: //main.m #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //这里为不可变数组赋值以可变字符串对象,稍后会作说明,此测试换成NSString也可. NSArray *array1 = [[NSArray alloc]initWithObjects: [NSMutableString stringWithString:@"…