Sea*_*ean 7 cocoa coding-style objective-c
假设您有一个方法返回一个新生成的NSArray实例,该实例是使用NSMutableArray内部构建的.你总是做这样的事情:
- (NSArray *)someArray {
NSMutableArray *mutableArray = [[NSMutableArray new] autorelease];
// do stuff...
return [NSArray arrayWithArray:mutableArray]; // .. or [[mutableArray copy] autorelease]
}
Run Code Online (Sandbox Code Playgroud)
或者你只是将可变数组对象保持原样并直接返回它,因为NSMutableArray是NSArray的子类:
- (NSArray *)someArray {
NSMutableArray *mutableArray = [[NSMutableArray new] autorelease];
// do stuff...
return mutableArray;
}
Run Code Online (Sandbox Code Playgroud)
就个人而言,当我从这样的方法返回时,我经常将一个可变数组转换为NSArray只是因为我觉得它更"安全"或更"正确".虽然说实话,我从来没有遇到过将一个可变数组转换为NSArray的问题,所以它实际上可能不是问题 - 但这样的情况是否有最佳实践?
我曾经这样做return [NSArray arrayWithArray:someMutableArray],但我慢慢相信它并没有提供任何真正的好处.如果您的API的调用者将返回的对象视为声明的类的子类,那么他们做错了.
[注意:请参阅下面的bbum警告.]
将NSMutableArray强制转换为NSArray是很常见的.我想大多数程序员都会意识到,如果他们对一个不可变对象进行低估并改变它,那么他们就会引入令人讨厌的错误.
此外,如果您有一个NSMutableArray ivar someMutableArray,并且您[NSArray arrayWithArray:someMutableArray]使用KVC访问器方法返回,它可能会搞乱KVO.你将开始得到"对象已被释放,观察者仍然附加"错误.
| 归档时间: |
|
| 查看次数: |
1512 次 |
| 最近记录: |