objective-c - 重新初始化对象

标签 objective-c object initialization

我有一个带有一堆自定义属性的对象,我在 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 模式是什么?

最佳答案

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

对于重用的 Objective-C 类,我能想到的唯一示例是 UITableViewCell。使这些可重复使用是有充分理由的,因为它可以避免降低滚动性能。

关于objective-c - 重新初始化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21312133/

相关文章:

ios - X代码 6 : I can't select a view by its storyboard ID

ios - 当我得到以下内容时,为什么必须输入?

ios - Objective C - IOS - Xcode 4.6.2 - 听不到 mp3 文件的声音

JavaScript 对象行为

VBA检查变量是否为空

objective-c - 如何独立处理 AVURLAsset 的单独轨道?

c++ - 循环遍历 C++ 类的对象

c++ - 零初始化、未命名、临时无符号整数

c++ - 在编译时初始化非常大的 C++ std::bitset

java - Java中哈希码的延迟初始化