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);
}
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开发之路--微博“更多”页面
- iOS开发之路--微博骨架搭建
- iOS开发使用JSON解析网络数据
- IOS开发代码分享之获取启动画面图片的string
- iOS开发使用XML解析网络数据
- IOS开发之路--C语言数组和字符串
- IOS开发代码分享之用nstimer实现倒计时功能
- iOS开发使用GDataXML框架解析网络数据
- IOS开发代码分享之设置UISearchBar的背景颜色
- ios推送证书
- iOS和tvOS游戏按需加载资源简介
- ios开发之环境搭建-01
- 在开发iOS程序时对日期处理的总结
- iOS开发——keychain的使用
- iOS Graphics Technologies iOS 图形技术
- iOS开发异常错误总结
- 学习Objective-C:入门手册
- iOS开发 简单实现视频音频的边下边播
- 初学ios开发之iOS 证书、描述文件、AppID