iOS面试小结

2015-07-06  本文已影响184人  零纪年

1. @property (copy) NSMutableArray *array; 这样写有什么问题吗?

因为用了copy, 内部会深拷贝一次, 指针实际指向的是NSArray, 所以如果调用removeObject和addObject方法的话, 会unRecognized selector 

-copy, as implemented by mutable Cocoa classes, alwaysreturns their immutable counterparts. Thus, when an NSMutableArray is sent -copy, it returns an NSArray containing the same objects.

Becausewordshas the memory qualifiercopy, this line:

NSMutableArray *mutWords = [[NSMutableArray alloc] initWithArray:fixedWords];

self.words = mutWords;

Expands out to:

NSMutableArray *mutWords = [[NSMutableArray alloc] initWithArray:fixedWords];

self.words = [mutWords copy];

Given that NSMutableArray is a subclass of NSArray, the compiler doesn't complain, and you now have a ticking time bomb on your hands because NSArray does not recognize it's mutable subclass' methods (because it cannot mutate it's contents).

上一篇下一篇

猜你喜欢

热点阅读