码迷,mamicode.com
首页 > 其他好文 > 详细

@property 和 @systhesize

时间:2015-09-04 22:25:39      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:

@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++中的点可以直接访问成员变量(也就是实例变量)。

@property 和 @systhesize

标签:

原文地址:http://www.cnblogs.com/amazingliu/p/4782386.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!