- 首页 > it技术 > >
OC学习笔记03-OC中访问修饰符,点语法与@property,@synthesize关键字
#import @interface Person : NSObject
{
NSString * _name;
//interface中无修饰默认protected
@protected
int _age,_height;
@private
double _weight;
@package
BOOL _isAlive;
}@property NSString name;
//生成getter和setter的声明
@property int age,height;
//同种类型可以写一起,同样是分别生成
@property double weight;
@property BOOL isAlive;
@end@implementation Person
- (void)setName:(NSString*)name
{
NSLog(@"set name");
_name=name;
}
//若setter,getter有部分实现,只生成未实现部分
@synthesize name = _name;
//也可以用,分隔写一行,生成时同样是一个一个生成getter和setter
@synthesize age=_age , height=_height , weight=_weight , isAlive=_isAlive;
@end//子类继承父类所有成员及方法,虽然子类中无法直接访问父类private成员
//但子类仍然拥有该成员
@interface Staff : Person
{
@public
NSString * _nickname;
}//Xcode4.4后,@property也包含了原本@synthesize的功能
//生成getter与setter的声明及实现,若无此成员变量,还默认生成private的以_开头的成员变量
@property double salary;
@property NSString *position;
@end@implementation Staff
{
double _salary;
//implementation中声明的默认为private
@public
int _staffNo;
}//若无声明此成员,则自动生成
@synthesize position=_position;
@endint main(int argc, const char * argv[])
{Staff *staff=[Staff new];
[staff setName:@"Johnny"];
[staff setSalary:200.0];
[staff setIsAlive:YES];
//NSString 创建方式之一
NSString *str=[NSString stringWithFormat:@"my name is %@ and my salary is %.2f ",[staff name],[staff salary]];
NSLog(str);
// OC中的点语法,点语法本质是调用getter或setter,编译器碰到点语法,自动根据是否赋值转换成相应的getter或setter
staff.name=@"Bale";
//等价于[staff setName:@"Bale"];
staff.position=@"manager";
NSString *str2=[NSString stringWithFormat:
@"my name is %@ and my salary is %.2f ",
staff.name,staff.salary];
//等价于[staff salary]
NSLog(str2);
} /*
OC中的访问修饰符:
@public公用的,都可直接访问
@protected本类与其子类中可直接访问
@private只能被本类中对象方法直接访问
@package 同一框架中可直接访问,非同一框架中无法直接访问在interface中声明的成员变量默认是protected
在implementation中声明的成员变量,默认是private(在没被他人import的情况下,即使加@public仍然无法被他人引用)关键字@property与@synthesize
@property用于生成getter与setter的声明,只能用于interface中例:@property NSString * name
@synthesize 用于生成getter与setter的实现,只能用于implementation中例:@synthesize name = _name (若无_name的成员变量,则自动生成private 的_name成员变量)
生成的getter和setter会根据代码中的getter,setter实现情况和成员变量定义情况动态生成缺少的部分,即
若getter或setter已经有实现或声明则只生成没实现或没声明的那部分,若有自动生成getter或setter的实现而且
成员变量未定义,则自动生成private的_开头的成员变量*/
推荐阅读