Objective

在我们之前的学习里, 我们创建对象的时候都是用new方法, 其实在实际开发中,new是不太正规的写法, 写的太死了, 很有局限性, 所以我们得另寻方法解决, 让我们一起来看看吧~~~


例子:

#import <Foundation/Foundation.h>

@interface Person : NSObject
@end

@implementation Person
@end

int main()
{
    Person *p1 = [Person new];

    Person *p2 = [[Person alloc]init];
	
    return 0;
}

其实我们把new方法拆分之后, 就等于下面那一句, " alloc init ", 这么写相对于new方法来说会更加的灵活,alloc我们就不用看了, 是分配空间, 重点在init, 初始化的时候, 聪明的朋友应该想到了, 这么写, 那么在init的时候就可以初始化数值了.


但是在重写init的时候需要注意一件事情:

#import <Foundation/Foundation.h>

@interface Person : NSObject
@property int age;
@end

@implementation Person
- (id)init
{
    self = [super init];

    if (self != nil)
    {
	_age = 10;
    }
    return self;
}
@end

int main()
{
    Person *p1 = [Person new];

    Person *p2 = [[Person alloc]init];
	
    return 0;
}


必须得写上self = [super init]这句, 关于深层的原理我们暂时不要去问为什么, 以后我们写重构方法, 就只有按照上面例子的几个写法, 等熟练了之后, 我们再详细说更深层次的原理.

PS: self = [super init]; 是初始化父类中声明的成员变量, 并且赋给self, 只有self != nil的时候, 那么就代表初始化成功, 再进行下一步的初始化, 最后在返回.



但是在C语言中, 我们知道在判断语句了不写判断条件, 默认就是 "不等于", 那么我们可以改改:

- (id)init
{
    if (self = [super init])
    {
	_age = 10;
    }
    return self;
}

更加简单的就可以完成重构方法了~~



构造方法:用来初始化对象的方法,是个对象方法,-开头

重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值


重写构造方法的注意点

1.先调用父类的构造方法[super init]

2.再进行子类内部成员变量的初始化




好了, 这次我们就讲到这里, 下次我们继续~~~

原文地址:https://www.cnblogs.com/iOSCain/p/4282839.html