OC . 语法
2017-10-17 本文已影响22人
Cy_Star
一、点语法作用
1、方便其他语言程序员很快转到OC开发
2、程序设计简单化
3、隐藏了内存管理细节
4、隐藏多线程、同步、加锁细节
当然是使用点语法 ** . ** 还是实用中括号的方式 [** **],随个人喜好。
二、属性可以在不使用括号的情况下使用点语言,无需调用 [ ** **] 可以使用点语法来访问,看似是直接访问 ** . ** 的变量,但属性始终调用方法,而方法可以访问对象的数据。
如下
setter函数
-(void) setAge:(int)newAge{
age = newAge;
}
getter函数
-(int)age{
return age;
}
使用方式
1、
[** . setAge:20];
int a = [** age];
2、
** . age = 20; ----- //相当方式1上面的 [** . setAge:20]; ,
系统编译器会把 ** . age = 20 在编译的时候自动转成 [** . setAge:20]; 。
int a = ** . age; ------ //相当方式1上面的 int a = [** age]; 。
/*
方式2 是 @property 让编译器自动产生函数申明,编译器会自动生成setter 和 getter函数,这样就不用写上面的2个函数:
-(void) setAge:(int)newAge;
-(int)age;
只需要一行就可以代替了:@property int age; 。
@synthesize 就是编译器自动实现getter 和setter 函数,这样就不用写 :
-(void) setAge:(int)newAge{
age = newAge;
}
-(int)age{
return age;
}
只需要 @synthesize age; 就可以了。
当然怎么使用还是看自己个人喜欢❤️或者看情况来决定。
那么字段 age 会跟 -(int)age 同名都是 age ,这样不好区分,OC给字段提供了这种命名方式来区分
{
int _age;
}
@property int age;
同样如果使用@synthesize age; 改成 @synthesize age = _age; ,这样子就是说明不管是 setter 还是 getter 函数使用字段是 _age 而不是 age
*/