您的位置:首页 > 运维架构

strong与copy,用错了,有时候还会崩溃,不知道问题出在哪里,有时候就有这里

2016-03-01 17:29 323 查看
@property (nonatomic,
copy)
NSMutableArray *muArr1;
// 用copy修饰的话,证明这个数组是不可变的,如果这个数组使用了可变数组的方法,那么就会崩溃.要用strong修饰才行。这是对可变类型而言

@property (nonatomic,
strong) NSMutableArray *muArr2;

@property (nonatomic,
copy)
NSArray *arr1; 
// 用copy修饰,证明这个数据是不可变的,如果这个数组指向一个可变的数组,那么那个可变的数组改变的话,这个数组不会改变,如果用strong修饰的话,那个可变数组改变,则这个arr1也会改变,正常情况用copy修饰。

@property (nonatomic,
strong)
NSArray *arr2;
// 用strong
修饰,证是指向的是同一块内存。另外一个东西改变,这个东西也会改变,为了不影响这个值所以我们一般都会用copy来修饰

@end

@implementation ViewController

- (void)viewDidLoad {

    [super
viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    

    self.muArr1 = [NSMutableArray
array];

    self.muArr2 = [NSMutableArray
array];

    

    /*

    [self.muArr1 addObject:@"1"];// muArr1用copy修饰的,所以是不可变的,但是使用了这个 addobject可变数组才有的方法,所以会报
-[__NSArray0 addObject:]: unrecognized selector sent
不可变数据NSArray不认识这个方法的错

     */

    [self.muArr2
addObject:@"2"];
// muArr2是用strong修饰的,所以没问题,是可变的

    

    self.arr1 =
self.muArr2;

    NSLog(@"用copy修饰的arr1%@",
self.arr1);

    [self.muArr2
addObject:@"2"];

    NSLog(@"对muArr2改变后的arr1%@
不变",
self.arr1);

    

    self.arr2 =
self.muArr2;

    NSLog(@"用strong修饰的arr2%@",
self.arr2);

    [self.muArr2
addObject:@"2"];

    NSLog(@"对muArr2改变后的arr2%@
也变了",
self.arr2);

    

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS开发 copy与strong