标签:
@property int age;
三件事:
1.生成成员变量 _age;
2.生成setter和getter方法的声明
- (void)setAge:(int)age;
-(int)age;
3.生成setter和getter的实现
- (void)setAge:(int)age
{
_age = age;
}
-(int)age
{
return _age;
}
=============================================
方式一:直接在@interface中的大括号中声明。
@interface MyTest : NSObject{
NSString *mystr;
}
方式二:在@interface中声明,然后再在@property中声明。
@interface MyTest : NSObject{
NSString *_mystr;
}
@property (strong, nonatomic) NSString *mystr;
随后在.m文件中加入
@synthesize mystr = _myStr;
方式三:直接用@property声明
@interface MyTest : NSObject{
}
@property (strong, nonatomic) NSString *mystr;
随后在.m文件中加入@synthesize mystr = _myStr;
========================================================================
方式一声明的成员变量只能在类内部使用,外部不能使用,是private的。
方式三可以在外部使用,类内部可以通过 _变量名 和 self.变量名来访问。
方式二不推荐。
下划线:从风格上表明这是类的内部变量,要是需要直接使用变量则需要使用get或者set的方式。
在 XCode目前有了自动合成属性器(设置器和访问器即为setter和getter方法)后,编译器会自动帮我们生成一个以下划线开头的的实例变量,所以我们不必去同时声明属性与变量。 我们可以直接用@property的方式来声明一个成员属性,在.m文件中使不使用@systhesize都无所谓,xcode会自动帮你生成 getter与setter.
========================================================================
.@property @synthesize
@property(retain,nonatomic)NSString* name;
@property(assign,nonatomic)int age;
@property(retain,nonatomic)NSString* name,*address,*hobby;
@synthesize name=_name,age=_age,address=_address,hobby=_hobby;
“=”等号不是赋值的意思。_name是编译器生成的实例变量,name,address,hobby等这些都是属性名称,可以理解为方法名,根据这些名称来生成setter和getter方法。调用时用 对象名.属性名,不能用 点运算符来调用后边的实例变量,像 对象名._name 这样是错误的。
@synthesize name,age,address,hobby;//代表实例变量声明,即默认为 name=name,age=age……实例变量名称随意取
==========================================================================
苹果将默认编译器从GCC转换为LLVM(low level virtual machine),从此不再需要为属性声明实例变量了。如果LLVM发现一个没有匹配实例变量的属性,它将自动创建一个以下划线开头的实例变量。因此,在这个版本中,我们不再为输出口声明实例变量。
例如:MyViewController.h文件
@interface MyViewController :UIViewController
@property (nonatomic, retain) UIButton *myButton;
@end
在MyViewController.m文件中,编译器也会自动的生成一个实例变量_myButton。那么在.m文件中可以直接的使用_myButton实例变量,也可以通过属性self.myButton.都是一样的。
注意这里的self.myButton其实是调用的myButton属性的getter/setter方法。这与C++中点的使用是有区别的,C++中的点可以直接访问成员变量(也就是实例变量)。
标签:
原文地址:http://www.cnblogs.com/amazingliu/p/4782386.html