您当前的位置:首页 > 计算机 > 编程开发 > Objective-C

第一个类程序

时间:05-12来源:作者:点击数:

最简单的

首先,创建一个工程,命名为Test,并将下面的代码编写到main.m中:

#import <Foundation/Foundation.h>
@interface Person : NSObject
@property NSString * name;
-(void)display;
@end
//以上是类的声明部分
@implementation Person
-(void)display{
    NSLog(@"%@",self.name);
}
@end
//以上是类的实现部分
int main(int argc, const char * argv[]) {
    Person * person=[[Person alloc] init];
    person.name=@"ZhangSan";
    [person display];
    return 0;
}

运行结果:ZhangSan

在使用C语言或者OC语言中的基本数据类型时,需要遵循“先声明,后使用”的原则。学习OC的类时,同样也需要遵循一个原则:“先声明,再实现,后使用”。

代码讲解

2-5行代码-类的声明部分

第2、5行代码:@interface是声明类的一个关键字,Person是声明类的类名,“:”可以理解成分隔符,后边紧跟的NSObject是这个类的父类。@end是类声明结束的标志。在这个结构中,我们可以添加类的属性和方法。(我们在OC中声明类的时候,必须指明父类(即使创建基类,也需要继承NSObject这个类)。

第3行代码:是向这个类中添加了一个字符串类型的name属性(声明属性的时候,不能给属性赋初值):@property是类中声明属性的关键字;在OC中,字符串类型用NSString类型的对象声明)(后面会具体讲NSString)。

第4行代码:是向这个类中添加一个返回值类型为空的方法。(方法的讲解会在类的具体分析中介绍) 

7-11行代码-类的实现部分

第7、11行代码:是一个组合结构,这个结构是给声明好的类做实现用的。类声明和类实现的关系,就如同函数的声明和实现,光有声明,没有实现,那么声明的类或者函数就什么功能也没有,是没有意义的。

OC中对方法的实现要写在上面这个结构中(在类的声明部分,只能声明属性和方法,不能对属性进行赋初值,也不能对方法做实现,这是类的实现部分的工作,OC将这两个工作分开进行)。

8-11行代码:给类中定义的display方法做的实现代码。实现的功能是输出类对象的name属性的值

(NSLog()相当于C语言中的printf函数,@""相当于printf函数中的“”,%@是OC字符串类型的占位符,作用相当于C语言中输出语句中的%d,%s。通过self.name可以获取当前对象name属性的值)。

学到这,类就讲完了,大家可能会有许多疑惑:

1、self是什么,self.name是什么,为什么通过self.name就可以获得类对象的name属性的值?

2、为什么声明方法的前面一定要有一个“-”符号,看着怎么这么别扭?

……

等等这些问题,在本章的后面几节会讲到。

13-18行代码-Person类的具体使用 

14行代码:Person * person:是声明一个Person类的对象,但是光声明不行,OC中的对象需要我们编写代码给它们分配内存空间。[Person alloc]中:alloc是一个方法,它是从NSObject这个父类中继承过来的,它能为我们自动对person对象分配内存(分配多少有OC语言的底层管理,你不需要知道),init同样是一个方法,也是继承父类的,它的功能是为person对象中的属性赋初值(表示数值的属性默认为0,字符串的属性默认没有值(用null表示)。

14行的代码可以替换成:(对于初始化对象的代码也可以这样写:

       Person * person=[Person alloc];(分配内存空间) 

       person =[person init](对person这个对象进行初始化);

15行代码:对person对象的name属性进行赋值。对于字符串来说,同样要使用@“”符号。

16行代码:调用person对象的display方法;使用类创建的对象调用类中方法,采取的方式用[]扩起来,具体[]中的内容,在类的具体分析部分介绍。

(对类的使用做出的总结:在使用类时(不管是我们自己创建的,还是OC语言自带的):如果需要调用对象的属性,采用:类对象.属性的方式如果需要调用类中的方法:对于方法开头有”-“的,用[对象 方法]的方法。在后面的学习中,我们还会遇到带有”+“的,用[类名 方法]的方式调用)

通过对最简单的类程序进行分析,我们可以在main.m文件初步的创建一个简单的类。这种建立类的方式是不对的。

OC类的正确建立

类的声明部分写在一个.h文件中,类的实现部分写在.m文件(不是main.m)中。类的使用在main.m文件中。(创建文件的方法参照“OC工程添加文件”章节)。

我们按照正确的做法将本节中的例子做一下拆分:

建立一个Person.h文件,编写以下代码:

#import <Foundation/Foundation.h>
@interface Person : NSObject
@property NSString * name;
-(void)display;
@end

 建立一个Person.m文件,编写以下代码:

#import "Person.h"
@implementation Person
-(void)display{
       NSLog(@"%@",self.name);
}
@end

 在main.m 文件中:

#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
    Person * person=[Person alloc];
    person =[person init];
    person.name=@"ZhangSan";
    [person display];
    return 0;
}

运行结果是:ZhangSan

注意:类的正确建立相比于前种方法,在类的实现部分和main.m文件中的使用部分都添加了类的.h头文件。

使用这种方式建立类的好处是:(必须使用正确方式建立类)

  1. 保护了类具有的封装的特性。使用前种方式使用类会破坏类的结构,做不到正确的使用类。
  2. 正确地使用类编程,能够降低程度地耦合度,降低工程的维护工作量。同时,可以使类中实现代码不公开。
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门