iOS 属性修饰符之NSString--copy--strong

来源:互联网 发布:雅典娜潮州网络女神 编辑:程序博客网 时间:2024/05/20 20:05

这几天项目中出现多处崩溃的问题,究其原因居然是属性修饰符使用不当造成,以前不是很明白他们的用法和带来的后果,只知道闷头使用,今天特意总结列出,以供学习

本篇参考http://blog.csdn.net/qq_18425655/article/details/51373611  感谢

代码:

@interface Test : NSObject  @property (nonatomic, strong) NSString *str1;  @property (nonatomic, copy) NSString *str2;  @end    #import <Foundation/Foundation.h>  #import "Test.h"  int main(int argc, const charchar * argv[]) {      @autoreleasepool {          NSMutableString *str = [NSMutableString stringWithString:@"hello"];          Test *test = [[Test alloc] init];          test.str1 = str;          test.str2 = str;          [str appendString:@" world"];          NSLog(@"str1:%@ str2:%@", test.str1, test.str2); // str1:hello world str2:hello      }      return 0;  } 

str1使用 strong 修饰的,str2 使用copy修饰的,现在让他们两个都等于一个可变字符串str。

修改str,输出结果发现,str1 也跟着str变了,而 str2 没有变。

把可变的 str 赋给 strong 修饰的、不可变的 str1,没有产生新对象,二者指向同一个地址,所以 str 的改变会影响 str1。

把可变的 str 赋给 copy 修饰的、不可变的 str2,产生了新对象,二者指向不同的地址,所以 str 的改变不会影响 str2
原创粉丝点击