[英]Literal syntax vs. mutableCopy and Objective-C compiler warnings
我对Python的经验比其他任何东西都多,所以使用可变与不可变数组和dicts有点奇怪。 我真的很喜欢Xcode 4.5添加的字面语法,但在做一些简单的搞乱时我遇到了这样的情况:
NSArray *myArray = [@[/*array objects here*/] mutableCopy];
[myArray addObject: @/*an object goes here*/];
并且编译器给我一个警告,声明“myArray可能不响应addObject”。
代码编译和addObject工作正常,我可以NSLog对象并验证它存在于myArray中 - 但我不完全理解这个警告的性质。 在这种情况下,mutableCopy不会返回NSMutableArray吗? 是否更适合简单地使用NSMutableArray而不是试图(过度)使用文字语法?
此外,由于这只是一个愚蠢的警告,我可以忽略它并继续吗? 这看起来......最糟糕的是懒惰,也许只是在未来打开通向恶作剧的大门。
您需要将变量声明为NSMutableArray
,而不是NSArray
。 addObject:
是仅在NSMutableArray
可用的方法。
编辑:你似乎也有一个不必要的@
在那里。 你的代码应该是:
NSMutableArray *mutable = [@[a, b, c] mutableCopy];
[mutable addObject:d];
在这种情况下,mutableCopy不会返回NSMutableArray吗?
确实如此。 这就是为什么你必须将返回值分配给NSMutableArray,而不是NSArray。
NSMutableArray *myArray = [@[/*array objects here*/] mutableCopy];
应该让编译器闭嘴。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.