类、对象的创建和使用

上篇介绍过面向对象编程的基础是对象,也就是类。怎样创建一个类呢?

// 对象的创建 alloc分配空间,init初始化。
    Model *model = [[Model alloc] init];
    // 赋值
    model.name = @"sunjunwei";
    // 输出
    NSLog(@"%@",model.name);

alloc : 分配空间,根据类中声明的实例变量为对象分配内存,将所有的实例变量置为默认值0,并返回首地址。

init : 默认初始化,为对象的实例变量设置初始值。

先看一下alloc方法。

+ (instancetype)alloc OBJC_SWIFT_UNAVAILABLE("use object initializers instead");

+ :表示此方法为类方法,只能类访问。

instancetype : 表示返回此类型的类的实例。(此方法在swift方法中已放弃使用)

有同学会会问什么id 类型也可以,如果为id类型,返回的是任意类型对象,只有在运行的时候才知道返回的类型,在编译的时候是不会检查的。

那和instancetype有什么区别:

       除了上面的区别,还有就是id可以当参数使用,而instancetype只能做返回值用。

再看看 init 方法:默认初始化方法。

- (instancetype)init;
 - :表示此方法为对象方法,只能对象调用。instancetype 表示初始化完成的对象。 

如果要在初始化的时候给变量或属性赋初始值,则可以在 init方法里面初始化。

/**
 如果重写init方法,则不会调用系统的init方法,则会调用重写后的init方法执行初始化。
 */
- (instancetype)init{
    _name = @"孙军伟";
    return self; // self 表示我,表示返完初始化完成的自己
}

使用对象:

// 对象的创建 alloc分配空间,init初始化。
    Model *model = [[Model alloc] init];
    // 赋值
    model.name = @"sunjunwei";
    [model sayHi]; // 给model对象发送 sayHi消息
    // 输出
    NSLog(@"%@",model.name);




猜你喜欢

转载自blog.csdn.net/zhongnanshan_001/article/details/80555356