在Objective-C中初始化对象的最佳方法

时间:2014-02-27 13:29:05

标签: objective-c object initialization

我对Objective-C很新,我想解决一段时间前我提出的问题。也许这是非常基本的东西,但我想知道初始化对象的最佳方法是什么。在我编写的一些简短编码中,我没有看到使用'init'方法或直接声明类中参数值的性能的视觉差异。但是,当我有一个包含多个对象的大型代码实例化时,哪些是实例化对象的最佳方法,或者有比这两个更好的替代方法?

例如,我创建了一个接口MyTestInterface,它使用了我在项目中创建的几个类:

@interface MyTestInterface ()

@property (nonatomic, retain) MyTestClassOne
@property (nonatomic, retain) MyTestClassTwo

...

这些类中的每一个(MyTestClassOne,MyTestClassTwo,...)都有一些其他属性,以及必须初始化的接口本身。我想澄清我的问题,对于那些不太了解的人,询问是否有办法初始化接口的对象,能够减少内存消耗和编译时间,当需要实例化多个对象时,在这种情况下。提前谢谢。

2 个答案:

答案 0 :(得分:0)

在Objective-c中初始化对象是在classe指定的初始化程序或其他初始化程序中完成的。对于NSObject的直接子类,这通常是' init'方法。您始终可以使用自定义指定的初始化程序。使用初始化器总是更好,因为当你扩展一个类并且需要初始化的超类中的依赖项时,它会初始化,因为在初始化对象时通常会在超类上调用init。对超类的这个init调用会对链进行处理,直到它到达NSObject。

初始化课程的一般方法是

NameOfClass *myClass = [[NameOfClass alloc] init];

- (id)init
{
  self = [super init];
  if (self) {

    // you set your default values here
    myLength = 10; //ex
  }
  return self;
}

关于自定义指定的初始化程序。您可以使用自定义指定的初始化程序从其他对象传递自定义值

NameOfClass *myClass = [[NameOfClass alloc] initWithLength:10];

- (id)initWithLength:(int)length
{
  self = [super init];
  if (self) {

    // you set your default values here
    myLength = length; //ex
  }
  return self;
}

答案 1 :(得分:0)

Apple网站上的Objective-C有一些介绍性材料:

https://developer.apple.com/library/mac/documentation/General/Conceptual/CocoaEncyclopedia/Initialization/Initialization.html

如果你刚刚开始使用Objective-C,那么从一本介绍书开始真的很有帮助,比如Big Nerd Ranch的其中一本:

Mac OS X的可可编程 http://www.amazon.com/Cocoa-Programming-Mac-4th-Edition/dp/0321774086/ref=pd_sim_b_3?ie=UTF8&refRID=02AAS1C6T2JMZKJC6DXA

iOS编程:Big Nerd Ranch指南 http://www.amazon.com/iOS-Programming-Ranch-Edition-Guides/dp/0321821521/ref=pd_sim_b_1?ie=UTF8&refRID=1KBR85MDBKH08Z88873Y