美文网首页
Objective-C中的Alloc 和init

Objective-C中的Alloc 和init

作者: WHFuture | 来源:发表于2016-05-24 15:45 被阅读143次

    alloc 是在物理内存中分配了一块内存,并且返回一个指针。

    MyClass* myObj = [MyClass alloc];
    

    此时myObj还不能使用,因为它的内存状态还没有得到正确的设置。
    init 设置对象的初始化状态并且将其返回。注意:[a init] 的返回值并不一定是a自身 ,原因如下:

    -init{ 
     self = [super init]; // 1.
     if(self){    // 2. 
           ....
     } 
    return self; // 3.}
    
    1. 首先,你需要调用超类的init 方法去设置超类的实例变量等,其返回值不不一定等于原来的self ,所以你需要将返回值重新赋值给self.
    2. 如果self 非空,则表明被超类控制的部分已经得到正确的初始化。词时,所有的实例变量都设置为nil (如果是对象),或者0(如果是整型)。接下来,你可以执行额外的初始化设置。
    3. 返回self

    因为initalloc的返回值不一定相等,所以不要讲两个方法分开使用,如以下代码:

    MyClass* myObj = [MyClass alloc]; 
    [myObj init];
    

    也不建议使用以下写法:

     MyClass* myObj = [MyClass alloc]; 
    myObj=[myObj init];
    

    因为你很有可能忘记写myObj=
    永远使用以下写法:

     MyClass* myObj = [[MyClass alloc] init];
    

    也不建议使用new 方法

    MyClass* myObj = [MyClass new];
    

    因为它不没有正确地调用初始化方法,一些类不并可以使用简单的init 方法,如NSView 需要initWithFrame:,这样就不能简单地对其使用new方法,所以不建议使用new 方法创建对象。

    相关文章

      网友评论

          本文标题:Objective-C中的Alloc 和init

          本文链接:https://www.haomeiwen.com/subject/deyzrttx.html