iOS开发小知识笔记 (1)property

1 @property

  • @property 是 readwrite,assign,atomic
  • 在使用 @property 时, 编译器默认会进行自动 synthesize,生成 getter 和 setter,同时把 ivar 和属性绑定起来
  • 使用 @dynamic,显式表示不希望编译器生成 getter 和 setter
  • protocol 中定义的属性,编译器不会自动 synthesize,需要手动写
  • 当重载父类中的属性时,也必须手动写 synthesize
1.1 copy与strong关键字
  1. NSString、NSArray、NSDictionary 等等使用copy关键字(block也是使用copy)
    2.它们的可变类型:NSMutableString、NSMutableArray、NSMutableDictionary使用strong关键字

对象拷贝有两种方式:浅复制(指针拷贝)深复制(内容拷贝)
集合的深复制有两种方法
(1)initWithArray:copyItems: 第二个参数设置为YES即可深复制

NSDictionary shallowCopyDict = [[NSDictionary alloc] initWithDictionary:someDictionary copyItems:YES];

如果你用这种方法深复制,集合里的每个对象都会收到 copyWithZone: 消息。
如果集合里的对象遵循 NSCopying 协议,那么对象就会被深复制到新的集合。
如果对象没有遵循 NSCopying 协议,而尝试用这种方法进行深复制,会在运行时出错。
copyWithZone: 这种拷贝方式只能够提供一层内存拷贝(one-level-deep copy),而非真正的深复制。

(2)将集合进行归档(archive),然后解档(unarchive)

NSArray *trueDeepCopyArray = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:oldArray]];

集合类对象的copy与mutableCopy

NSArray *array = @[@[@"a", @"b"], @[@"c", @"d"];
NSArray *copyArray = [array copy];
NSMutableArray *mCopyArray = [array mutableCopy];
结果:copyArray和array的地址是一样的,而mCopyArray和array的地址是不同的。说明copy操作进行了指针拷贝,mutableCopy进行了内容拷贝。但需要强调的是:此处的内容拷贝,仅仅是拷贝array这个对象,array集合内部的元素仍然是指针拷贝

NSMutableArray *array = [NSMutableArray arrayWithObjects:[NSMutableString stringWithString:@"a"],@"b",@"c",nil];
NSArray *copyArray = [array copy];
NSMutableArray *mCopyArray = [array mutableCopy];
结果:copyArray、mCopyArray和array的内存地址都不一样,说明copyArray、mCopyArray都对array进行了内容拷贝

  • 浅复制(shallow copy):在浅复制操作时,对于被复制对象的每一层都是指针复制。
  • 深复制(one-level-deep copy):在深复制操作时,对于被复制对象,至少有一层是深复制。
  • 完全复制(real-deep copy):在完全复制操作时,对于被复制对象的每一层都是对象复制。

更多详情请看

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、对象拷贝有两种方式:浅复制和深复制。顾名思义,浅复制,并不拷贝对象本身,仅仅是拷贝指向对象的指针;深复制是直接...
    滴答大阅读 787评论 0 2
  • 1.什么情况使用关键字copy? 相比 assign 有什么不同? (1).在 ARC 中,在有可能出现循环引用的...
    爱赚钱的依米阅读 2,069评论 0 22
  • 今天我又心机的穿的很仙~ 哥哥走到我身后,用工作证打我的屁股!好疼!以前都是不疼的!他让我拿下耳塞跟他讲话,我说你...
    哈姆Y特公主阅读 224评论 0 0
  • 如何为写而“读” 鲁讯先生说:“倘只看书,便只变成书橱。” 阅读,看起来是每个识字的人都具备的一种能力。又有多少人...
    思悟_0a4b阅读 266评论 2 0
  • 我坐的是K开头的火车,也就是最慢的火车,开往北京。此刻,火车还在临时停车中(大概停了20分钟了,外面漆黑一团……)...
    赴歺行阅读 2,892评论 1 1