为什么用copy for NSString属性?
2016-07-04 12:20
330 查看
当你声明一个NSString属性最好使用copy而不是strong。事实上这适用于任何不可变类,符合NSCopying协议像NSNumber NSArray,NSSet等等。所有我提到的这些类也有一个可变的版本。你想使用copy,因为NSString 属性可以传递NSString或NSMutableString实例。如果你传递NSMutableString实例那么这意味着字符串的值可能后面会改变。让我们看一下这个例子:
当我们运行这个现在我们注意我们的书的标题是“Worst book ever”。如果我们声明属性的为copy代替Strong,我们的书的标题就会变成“Best book ever”。在第一种情况下,当我们声明属性Strong,字符串的retain count将增加1,但我们的属性将指向同一个内存地址。这意味着任何人都可以改变的value持有一个内存地址的引用,在我们的案例中bookTitle变量。如果相反的我们使用copy,那么将会创建一个新的字符串复制我们的书类。这意味着修改booTitle不会有任何影响我们的字符串值,在大多数情况下这是我们想要的。
@interface Book : NSObject @property (strong, nonatomic) NSString *title; @end
- (void)stringExample { NSMutableString *bookTitle = [NSMutableString stringWithString:@"Best book ever"]; Book *book = [[Book alloc] init]; book.title = bookTitle; [bookTitle setString:@"Worst book ever"]; NSLog(@"book title %@", book.title); }
当我们运行这个现在我们注意我们的书的标题是“Worst book ever”。如果我们声明属性的为copy代替Strong,我们的书的标题就会变成“Best book ever”。在第一种情况下,当我们声明属性Strong,字符串的retain count将增加1,但我们的属性将指向同一个内存地址。这意味着任何人都可以改变的value持有一个内存地址的引用,在我们的案例中bookTitle变量。如果相反的我们使用copy,那么将会创建一个新的字符串复制我们的书类。这意味着修改booTitle不会有任何影响我们的字符串值,在大多数情况下这是我们想要的。
相关文章推荐
- 批处理中Copy与Xcopy命令的区别小结
- dos 文件复制 copy命令
- 谈谈xcopy中的排除copy
- php使用COPY函数更新配置文件的方法
- copy 将一个或多个文件从一个位置复制到其他位置
- cmd copy命令 文件复制
- NSString与C字符串之间的相互转换
- 浅析iOS中的浅拷贝和深拷贝(copy和mutableCopy)
- 浅谈Python中copy()方法的使用
- Python中使用copy模块实现列表(list)拷贝
- Objective-C中字符串NSString的常用操作方法总结
- 简单的copy程序
- 从源文件中读出最后10KB内容到目的文件中
- 负载均衡及会话保存(Ofbiz框架)
- JAVA Zero Copy的相关知识
- cp命令
- (转)讲一下retain/copy/assign的含义
- array 排序
- 检查内存技巧
- NSString 用法2