Objective-C中定义类需要分为2个步骤
1.
@interface(接口)部分
2.
@implementation(实现)部分
创建OC类会自动创建两个文件,分别是*.h文件和*.m文件,h文件就是定义接口部分,m文件就是实现部分。
一、接口部分
@interface用于声明定义类的接口部分,@end表示定义结束
@interface Person : NSObject
{
//成员变量声明
}
//方法声明
@end
紧跟类的花括号用于声明该类的成员变量,花括号后面的用于定义方法。
成员变量:用于描述该类的对象的状态数据,成员变量类型可以是任何OC允许的数据类型,成员变量名需要是一个合法的标识符,OC建议成员变量名以下划线(_)开头。
方法声明:用于描述该类的行为
方法声明语法如下
-/+ (方法返回值类型) 方法名:(形参1类型)形参1名 形参2标签:(形参2类型)形参3名…;
方法类型标识:-或者+,-表示该方法是实例方法,+表示该方法是类方法。
方法返回值类型:如果一个函数没有返回值,则需要用void来声明。
方法签名关键字:OC没有硬性的规定每个形参都需要给定一个形参标签,但是我没在编写方法的时候尽量给形参加一个标签,这是一个良好的编程习惯。
二、实现部分
@implementation用于声明类的实现,@end表示实现结束
#import "Person.h"
@implementation Person
{
//成员变量声明
}
//方法定义
@end
1.类实现部分可以定义自己的成员变量,成员变量在花括号中声明,声明以后只能在当前类内访问,因此在类实现部分声明变量相当于定义隐藏的成员变量。
2.必须为接口部分的所有方法提供定义,方法定义由方法签名和方法体组成。
3.实现部分也可以自己定义附加的方法,这些方法只能在本类中使用。
三、实例
接口部分:
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
//变量-实例变量
int _age;
char* _name;
}
//无返回值的实例方法
-(void)setName:(char*)name andAge:(int)age;
//有返回值的实例方法
-(NSString*)getInfo;
//类方法
+(void)sayHello;
@end
实现部分:
#import "Person.h"
@implementation Person
{
int _height;//这个变量只能在本类中使用
}
-(void)setName:(char*)name andAge:(int)age{
_name = name;
_age = age;
}
-(NSString*)getInfo{
[self printMessage];
return [NSString stringWithFormat:@"姓名:%s,年龄%d",_name,_age];
}
//定义了一个只能在本类中使用的方法
-(void)printMessage{
NSLog(@"只能在本类中使用的方法");
}
+(void)sayHello{
NSLog(@"Hello");
}
@end
四、对象的产生和使用
创建对象的语法为
[[类名 alloc] 初始化方法];
alloc是OC的关键字,负责为该对象分配内存空间,创建对象。另外还需要调用初始化方法为该实例执行初始化,NSObject类中定义了一个默认的初始化方法:init,OC中所有类都直接或者间接的继承NSObject,所以类的初始化可以用默认的init方法。
OC中调用方法的语法格式为:
[调用者 方法名:参数 形参标签:参数值…];
调用者可以是类也可以是对象,OC中规定,实例方法必须用实例来调用,而类方法则必须使用类调用。
//定义Person对象,并赋值
Person* person = [[Person alloc]init];
//调用实例方法
[person setName:"小明" andAge:10];
NSString*str = [person getInfo];
NSLog(@"%@",str);
//调用类方法
[Person sayHello];