1.3 创建一个类

1、问题

面向对象的程序员喜欢能够将功能封装进对象中。此时,就需要定义一个类来封装属性和行为。

2、解决方案

Objective-C中的类需要有接口和实现定义。尽管不是绝对必要,但通常要将接口和实现分开放到不同的文件中。这2个文件的名字是一样的,但接口文件的扩展名是.h。

类文件的扩展名是.m。

要使用一个类,你必须将该类头文件导入到代码中。

3、原理

假如要定义一个Car类。

在Car.h中,放的是Car类的接口。类接口必须以@interface开头,以@end结尾。在这2者之间定义的就是类的属性和方法。

#import <Foundation/Foundation.h>

@interface Car : NSObject // 意思是说你的car是NSObject的一个子类,NSObject是Objective-C的根对象。

@end

说明:NSObject类具有管理iOS提供的运行时的能力。继承自它的对象可以利用Objective-C出色的内存管理模型。

在Car.m中,要先导入Car.h,然后用@implementation声明正在实现一个自定义类。

#import "Car.h"

@implementation Car

@end

要使用你的类,就需要导入Car.h,然后从该类实例化一个对象。要实例化一个对象,就要发送2条消息:alloc和init。它们都来自超类NSObject。

【当实现一个新对象时,不要覆盖alloc方法,这个方法是由NSObject声明的。与之相反的是,请覆盖init方法,创建自定义的初始化方法,因为NSObject提供的init方法只是起占位作用】

Car *car = [[Car alloc] init];

4、代码

//==============Car.h

#import <Foundation/Foundation.h> 

@interface Car : NSObject 

@end

//===============Car.m

#import "Car.h" 

@implementation Car 

@end

//==================main.m

#import "Car.h" 

int main (int argc, const char * argv[]){ 

        @autoreleasepool { 

                Car *car = [[Car alloc] init]; 

                NSLog(@"car is %@", car);

        } 

        return 0; 

}

5、运行代码

clang -fobjc -framework Foundation Car.m main.m -o maccommandlineapp

相关推荐