在我的第一篇文章 OC基本语法概述中已经说到:
[object message] 或者 object.message来发送消息
object表示一个对象或是一个类,message消息也可以认为是一个函数。这句话值得深刻理解。
事实上也可以是如此理解,[instance property] 或者是instance.property此处的property是OC中我们自己对类定义的属性。
所以总结来说[A B]或者A.B中:
1、A可以是一个类或者是对象,B可以是属性或者是方法
2、当A是类时,B只能是类方法;当A是对象时,B可以使对象的属性也可以是实例方法。
下面是A是对象,B是实例方法的一个源代码。我写了一个叫Cat的类,一共有三个文件,Cat.h和Cat.m以及main.m。
注意:在[Cat alloc]处,A为类,B为类方法。
Cat.h文件
@interface Cat : NSObject
{
//Cat类中设置了一个int类型的字段或者叫成员变量,而且OC中类的字段默认是@protected的
int age;
}
//这是一个setter函数,用于设置或修改值
- (void) setAge:(int)newAge;
//这是一个getter函数,用于获取值,也可写成getAge,不过在Cat.m文件中使用时函数名应写作getAge:
- (int) age;
@end
Cat.m文件
#import <Foundation/Foundation.h>
#import "Cat.h"
@implementation Cat
- (void) setAge:(int)newAge
{
//将方法(函数)参数对字段进行赋值,即设置字段的值
age = newAge;
}
- (int) age
{
//返回字段的值,注意此处的age与函数名age是不同的两个概念,此处age是字段的名字
return age;
}
@end
main.m文件
#import <Foundation/Foundation.h>
#import "Cat.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
//经典调用
//初始化一个cat1对象为其分内存
Cat *cat1 = [[Cat alloc]init];
//对cat1对象使用方法设置字段age的值
[cat1 setAge:100];
//获取cat1对象中age字段的值
int catAge = [cat1 age];
NSLog(@"cat age is %d",catAge);
// cat age is 100
//点语法调用
Cat *cat2 = [[Cat alloc]init];
cat2.age = 200;
int catAge2 = cat2.age;
NSLog(@"cat2 age is %d",catAge2);
// cat age is 200
}
return 0;
}