@property(nonatomic, copy) NSMutableArray *array;
self.array = [NSMutableArray alloc] initWithCapacipty:5];
[self.array addObject:@"hello"];
//大师们为什么上面这样写会报错啊
//如果像下面这样写就不报错了,这是为什么呀
_array = [[NSMutableArray alloc] initWithCapacipty:5];
[_array addObject:@"hello"];
你这个应该会内存泄漏...array为copy用他的时候加了self. retaincount会加1... 回复<aclass='referer'target='_blank'>@Lemonfqm:你去了解下@property的属性copy本身是代表什么意思你就知道为什么了...回复<aclass='referer'target='_blank'>@lecai:我觉的这个运行报错似乎与内存泄露没有关系的!大师能不能给我解释哈啊?回复<aclass='referer'target='_blank'>@Lemonfqm:autorelease本身是有生命周期的...不是你用了就万事大吉...的确,是会发生内存泄露,如果我加了autorelease,运行时还是会蹦掉的啊!<divclass="ref">
<spanstyle="font-size:14px;line-height:22px;">楼主,你还是把代码贴全,这样看不出问题来。感觉有可能是其他地方的问题。
你的.m里加了@synthesizearray了吗楼主还没弄透@property(我自己也是一知半解),你用self.array=是通过setter方法来给array赋值,而你又给这个setter方法设置copy,而经过copy生成的array指针指向的是一个不可变数组(详细请参见苹果的官方文档),这时你在调用add方法,肯定会出问题,而且Xcode会提示:“unrecognizedselectorsenttoinstance” 。
至于_array为什么不报错,很简单,因为_array是一个变量,没有copy修饰,指向的还是你原来生成的可变数组,所以add方法有效。
应经明白property这个属性了<divclass="ref">楼主还没弄透@property(我自己也是一知半解),你用self.array=是通过setter方法来给array赋值,而你又给这个setter方法设置copy,而经过copy生成的array指针指向的是一个不可变数组(详细请参见苹果的官方文档),这时你在调用add方法,肯定会出问题,而且Xcode会提示:“unrecognizedselectorsenttoinstance” 。
至于_array为什么不报错,很简单,因为_array是一个变量,没有copy修饰,指向的还是你原来生成的可变数组,所以add方法有效。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。