我有一个对象,其中包含一些我在init
方法中设置的自定义属性。在某些时候,我想将对象重置为原始状态。在Apple的文档中说明init
永远不应该与alloc
分开,所以使用ARC,这对我来说是一个非常合理的方式:
MyObject* myObject = [[MyObject alloc] init]; // inits myStringProperty to @""
myObject.myStringProperty = @"Hello world!";
NSLog(myObject.myStringProperty);
myObject = [[MyObject alloc] init]; // resets myStringProperty back to @""
NSLog(myObject.myStringProperty);
但是,我已经读过(例如here),在这种情况下,一个常见的模式是明确定义reset
方法并将重新初始化代码重构到那里。显然,这避免了必须创建一个全新的对象(虽然我无法想象它的开销是如此之高,并且将释放和重新分配给ARC似乎是最简单的方法)但是还有其他任何理由选择一个方法超过另一个?对象重新初始化的一般Objective C模式是什么?
答案 0 :(得分:6)
如果您创建reset
方法的主要目的是避免释放和分配新对象的开销,那么我会说在大多数情况下会跳过重置方法。除非初始化对象非常复杂或耗时,否则这是一种无用的微优化。保持您的类(以及使用它的代码)更简单,只需在需要新对象时创建一个新对象。
我能想到的一个重用的Objective-C类的唯一例子是UITableViewCell
。有一个很好的理由使这些可重用,因为它可以避免降低滚动性能。