重新初始化对象

Ken*_*eld 4 initialization object objective-c

我有一个对象,其中包含我在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);
Run Code Online (Sandbox Code Playgroud)

但是,我已经读过(例如这里)在这种情况下的一个常见模式是显式定义一个reset方法并将重新初始化代码重构到那里.显然,这避免了必须创建一个全新的对象(虽然我无法想象它的开销是如此之高,并且将释放和重新分配给ARC似乎是最简单的方法)但是还有其他任何理由选择一个方法超过另一个?对象重新初始化的一般Objective C模式是什么?

Bri*_*ian 6

如果创建reset方法的主要目的是避免释放和分配新对象的开销,那么我会说在大多数情况下跳过reset方法.除非初始化对象非常复杂或耗时,否则这是一种无用的微优化.保持您的类(以及使用它的代码)更简单,只需在需要新对象时创建一个新对象.

对于重用的Objective-C类,我能想到的唯一例子是UITableViewCell.有一个很好的理由使这些可重用,因为它可以避免降低滚动性能.