iOS-strong和copy_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > iOS-strong和copy

iOS-strong和copy

 2017/11/20 18:18:22  小圭哥  程序员俱乐部  我要评论(0)
  • 摘要:strong和copy是常用到的修饰符,那么什么时候用strong,什么时候用copy,先上一段代码再说(以下代码直接在ViewController中写);先定义两个数组///strong@property(nonatomic,strong)NSArray*arraystrong;///copy@property(nonatomic,copy)NSArray*arraycopy;viewDidLoad方法-(void)viewDidLoad{[superviewDidLoad]
  • 标签:iOS Ron

strong和copy是常用到的修饰符,那么什么时候用strong,什么时候用copy,先上一段代码再说(以下代码直接在ViewController中写);

先定义两个数组

///strong
@property (nonatomic,strong) NSArray *arraystrong;
///copy
@property (nonatomic,copy) NSArray *arraycopy;

viewDidLoad方法

- (void)viewDidLoad {
    [super viewDidLoad];
    
    NSMutableArray *arrayMut = [NSMutableArray array];
    ///先添加一个字符串
    [arrayMut addObject:@"xiaogui1"];
    self.arraystrong = arrayMut;
    self.arraycopy = arrayMut;
    ///再添加一个字符串
    [arrayMut addObject:@"xiaogui2"];
    
    NSLog(@"arraystrong=%@\narraycopy%@",self.arraystrong,self.arraycopy);
}

打印结果

可以看到arraystrong随着arrayMut的改变而改变了,而arraycopy没有随着arrayMut的改变而改变;原因是因为用strong来修饰时,赋值时并没有创建新的空间,指向的是同一个指针的引用空间,而用copy时,创建了新的内存空间,没有和arrayMut指向同一个内存; 但是还有一个问题,往 ↓ 看:

 


 

当我把self改成下划线_去引用变量时:

- (void)viewDidLoad {
    [super viewDidLoad];
    
    NSMutableArray *arrayMut = [NSMutableArray array];
    ///先添加一个字符串
    [arrayMut addObject:@"xiaogui1"];
    ///把self改成_
    _arraystrong = arrayMut;
    _arraycopy = arrayMut;
    ///再添加一个字符串
    [arrayMut addObject:@"xiaogui2"];
    
    NSLog(@"arraystrong=%@\narraycopy%@",self.arraystrong,self.arraycopy);
}

打印结果:

这是因为用self引用时,调用了自身的get set方法,也就是因为这样,才实现了strong和copy,而直接用_是没有执行get set 方法的,所以两个数组的值是一样的;所以一般在项目中,全部使用self比较好,个人认为,有误还请指出。

 

发表评论
用户名: 匿名