类声明的格式为:

1
2
3
@interface ClassName:superClassName

@end

类实现的格式为:

1
2
3
@implementation ClassName

@end

下图为类声明的语法展示:

Class interface

类中的变量部分和方法部分的声明方式与其他语言不一样,类中的变量需要写在大括号内。

函数(方法)

在objective-c中,函数(方法)的声明和其他语言中函数的声明有较大不同,在oc中,函数中除了第一个参数外,每个参数都需要一个参数名字,这个参数名字主要用于告诉使用者此参数的含义,这个参数名字不会在实现中被实际的调用,调用时使用的还是对应的参数。

下面为参数声明的语法展示:

method

函数的声明:

1
2
3
4
5
6
7
8
9
10
11
12
@interface Student : NSObject  
{
NSString *studentName;
NSInteger age;
}

-(void) printInfo;
-(void) setStudentName: (NSString*) name;
-(void) setAge: (NSInteger) age;
-(NSString*) studentName;
-(NSInteger) age;
@end

函数的实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@implementation Student  

-(void) printInfo
{
NSLog(@"姓名:%@ 年龄:%d岁",studentName,studentAge);
}
-(void) setStudentName: (NSString*) name
{
studentName = name;
}
-(void) setAge: (NSInteger) age
{
studentAge = age;
}
-(NSString*) studentName
{
return studentName;
}
-(NSInteger) age
{
return studentAge;
}

@end

类中变量的访问权限

类中的变量有三种访问权限,分别为@public, @protected, @private,默认是@protected。

这三个关键字对应的权限如下:

class access

Tips

1.在ObjC中推荐成员变量名以_开头,如NSString *_name;
2.@package修饰的变量为在框架内是公共的,但是框架外是私有的;
3.在ObjC中所有的对象类型的变量都必须加上“*”,在ObjC中对象其实就是一个指针,但是基本类型不用加”*”;
4.在ObjC中使用[]进行方法调用,在ObjC中方法调用的本质就是给这个对象或类发送一个消息; 
5.在ObjC中类的实例化需要两个步骤:分配内存、初始化; 
6.公共成员的调用使用“->”操作符,比如person->_birthday; 
7.属性变量的调用使用“.”操作符,比如person.age;
8.在ObjC中方法分为静态方法和动态方法两种,动态方法就是对象的方法,静态方法就是类方法;
9.在ObjC中使用“-”定义动态方法,使用“+”定义静态方法;
10.如果一个方法在.h中有声明则该方法是公共方法,如果没有在.h中声明直接在.m中定义则该方法是私有方法,外部无法访问;
11.在ObjC中方法的参数类型、返回值类型需要放到()中,而且参数前必须使用冒号,并且此时冒号是方法名的一部分;
12.如果不通过@property定义属性变量,可以先定义@public的变量,然后定义相应的getter和setter方法,getter方法写作变量的名字,setter方法写作setA,如下,定义的变量为int _age;
1
2
3
//声明age的setter、getter方法
-(int)age;
-(void)setAge:(int)age;

然后就可以通过person.age进行变量的访问了。

13.在ObjC中关键字self不仅可以表示当前对象还可以表示类本身,也就是说它既可以用在静态方法中又可以用在动态方法中;
14.不要在变量的set方法中使用self,不然容易造成死循环;
15.使用“.”操作符来访问属性变量,其实是ObjC中的语法糖,其意义和c语言中“.”操作符不一样,在ObjC中相当于[obj age],但具体是调用get还是set方法要看具体的是赋值操作还是取值操作;
16.通过description可以显示类的信息(默认为类名和对象地址),使用%@格式化输出时便会调用此方法打印类的信息
17.函数重写不需要关键字来修饰,不同于swift中的override

留言