我继承了这段代码,并试图弄清楚为什么其中有一个copy。
- (id)initWithLocation:(CLLocation *)inLocation {
if (self = [super init])
{
_location = [inLocation copy];
}
return self;
}也就是说,为什么你需要在CLLocation上做一个deep copy,使用_location = [inLocation copy]而不仅仅是_location = inLocation。
有什么建议吗?
发布于 2015-02-27 00:34:01
对于原始作者来说,一个可能的原因是为了防止从表示层到模型对象(即位置)的强引用,这可能会对模型对象的生命周期造成严重破坏。通过复制,您将获得一个新的独立实例,该实例与模型层中的实例匹配。
我必须说,这是一个很好的实践。没有理由说明为什么在表示层上以“平面2D”方式呈现的任何内容都应该是活动模型对象实例。当然,我意识到新的location实例也是一个真实的对象实例(而不是原始值),但它的用途仅限于在UI层中“挂起”并随其消亡。有一种趋势是将一些以前在Objective-C中是对象的类型取消对象化,而现在它们在Swift中是结构。
https://stackoverflow.com/questions/28740070
复制相似问题