objective-c - Objective C——创建和初始化对象的首选方式

标签 objective-c object creation preference

这两种创建和初始化对象的方法哪个更可取?

MyClass oClass = [[MyClass alloc] init];
oClass.length = 5;
oClass.text = @"Hello";

或者使用包含大致相同代码但看起来像这样的类方法:

MyClass oClass = [MyClass myClassWithLength:(int) 5 andText:(NSString *) @"Hello"];

当我看到事情以不止一种方式完成并且我不知道一个是否比另一个更好,或者为什么更好时,我讨厌它!

最佳答案

不要成为仇恨者。 :-)

顺便说一句,我假设你的意思是:

(编辑:删除了不必要的转换)

MyClass oClass = [[MyClass alloc] initWithLength:5 andText:@"Hello"];

多个初始化...方法的原因是为了让开发人员更方便地创建正确初始化的实例。因此,例如,如果您发现开发人员经常需要创建具有长度和文本的 MyClass 实例,您可以通过提供允许他们一步完成的 API 来让他们的生活更轻松。如果您发现开发人员还经常需要仅使用文本字符串创建 MyClass 的实例,您还可以提供 -initWithText: 方法。

如果以这种方式创建的实例经常用作临时对象(即,不存储在实例变量或静态变量中),您还可以添加一个类便利方法,如 +myClassWithText: 返回使用提供的文本字符串初始化的 MyClass 的自动释放实例。

至于哪个更好:尽可能完全初始化对象总是更好,因此如果对象需要正确初始化两个值,请使用允许您提供两个参数的方法。如果您不需要存储对正在创建的实例的引用,请使用类便捷方法,这样您的代码就不必处理内存管理。

关于objective-c - Objective C——创建和初始化对象的首选方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2417925/

相关文章:

java - 在 Java 中,当对象实例化失败时会发生什么?

mysql - 过期日期作为 TIMESTAMP 列的默认值

ios - 委托(delegate)方法在我的应用程序中工作,我如何使它在我的框架中工作?

objective-c - Objective C 2.0 是否发生了如此大的变化以至于旧代码将不再运行? Apple 目前只有 Obj C 吗?

objective-c - 检查 NSRunLoop 并使用适当的 NSURLConnection 方法

ios - 滚动时 Xcode TableView 滞后

javascript - 如何从同一对象的方法引用属性?

c++ - 使用自定义构造函数将对象实例化为类属性 (C++)

c# - 使用 XNA 和 .NET 的屏幕保护程序?

java - Java中不使用getClass()如何区分相似对象?