Objective C - 创建和初始化对象的首选方法

Sco*_*ton 5 creation object objective-c preference

创建和初始化对象的两种方法之一是否更可取?

MyClass oClass = [[MyClass alloc] init];
oClass.length = 5;
oClass.text = @"Hello";
Run Code Online (Sandbox Code Playgroud)

或者使用包含大致相同代码的类方法,但如下所示:

MyClass oClass = [MyClass myClassWithLength:(int) 5 andText:(NSString *) @"Hello"];
Run Code Online (Sandbox Code Playgroud)

当我看到事情不止一种方式而且我不知道一个人比另一个人好,或者为什么时,我讨厌它!

jle*_*ehr 9

不要成为仇敌.:-)

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

(编辑:删除不必要的演员表)

MyClass oClass = [[MyClass alloc] initWithLength:5 andText:@"Hello"];
Run Code Online (Sandbox Code Playgroud)

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

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

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