Objective-c - setter/getter方法的自动生成:(Xcode4.4版本之前)
2016-12-29 16:57
591 查看
/*
Objective-c - setter/getter方法的自动生成:
大前提:Xcode在4.4版本之前@property,@synthesize的用法和使用注意:
@property:(写在@interface中)
1> 作用
自动生成setter/getter方法的声明.
2> 语法格式
@property
数据类型 数据名称.
3> 工作原理
编译器在编译的时候会自动的生成setter方法的声明:- (void)set首字母大写的数据名称:(数据类型)数据名称;
自动的生成getter方法的声明:- (数据类型)数据名称;
4>使用注意
1, @property的数据类型和数据名称要和属性一致,属性的数据名称不带下划线;
2, @property的数据类型相同的时候可以批量的声明,数据类型不同是不可以批量声明的;
@synthesize:(写在@implementation中)
1> 作用
自动生成setter/getter方法的实现.
2> 语法格式
@property
数据名称.
3> 工作原理
1, 编译器在编译的时候会自动的生成一个与@property相对应的真私有属性,即声明在@implementation中的.
2, 自动生成setter方法的实现,在方法的内部直接将参数赋值给了它自动生成的真私有属性.
3, 自动生成getter方法的实现,在方法的内部直接返回它自动生成的真私有属性的值.
如下代码:
@interface YYPerson : NSObject
{
NSString *_name;
}
@property NSString *name;
@end
@implementation YYPerson
@synthesize name;
@end
等价于:
@interface YYPerson : NSObject
{
NSString *_name;
}
- (void)setName:(NSString *)name;
- (NSString *)name;
@end
@implementation YYPerson
{
NSString *name;
}
- (void)setName:(NSString *)name
{
self->name = name;
}
- (NSString *)name
{
return self->name;
}
@end
4> 使用注意
1, 因为@synthesize自动生成了一个与@property相对应的不带下划线的真私有属性,而使得在@interface中声明的的带下划线
的属性显得多余,因此可以将@interface中声明的的带下划线的属性注释掉;
但@synthesize自动生成的不带下划线的真私有属性又很不规范,所以@synthesize的时候使用以下格式:
@synthesize @property名称 =
定义在@interface中的带下划线的属性名,即: @synthesize name = _name;
这样写的意义:
1,@synthesize不会自动生成私有属性;
2,自动生成setter方法的实现,在方法的内部直接将参数的值赋值给后面指定的属性.
3,自动生成getter方法的实现,在方法的内部直接返回后面指定的属性的值.
此时代码如下:
@implementation YYPerson
@synthesize name = _name;
@end
等价于:
@implementation YYPerson
{
NSString *name;
}
- (void)setName:(NSString *)name
{
_name = name;
}
- (NSString *)name
{
return _name;
}
@end
2, @synthesize生成的setter方法的实现,没有逻辑判断,是直接赋值或返回的.
如果需要逻辑判断,则需要重写setter方法.
3, @synthesize也可以批量生命,数据类型不同也可以批量声明.
*/
#import <Foundation/Foundation.h>
int main(int argc,
const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
}
return 0;
}
Objective-c - setter/getter方法的自动生成:
大前提:Xcode在4.4版本之前@property,@synthesize的用法和使用注意:
@property:(写在@interface中)
1> 作用
自动生成setter/getter方法的声明.
2> 语法格式
@property
数据类型 数据名称.
3> 工作原理
编译器在编译的时候会自动的生成setter方法的声明:- (void)set首字母大写的数据名称:(数据类型)数据名称;
自动的生成getter方法的声明:- (数据类型)数据名称;
4>使用注意
1, @property的数据类型和数据名称要和属性一致,属性的数据名称不带下划线;
2, @property的数据类型相同的时候可以批量的声明,数据类型不同是不可以批量声明的;
@synthesize:(写在@implementation中)
1> 作用
自动生成setter/getter方法的实现.
2> 语法格式
@property
数据名称.
3> 工作原理
1, 编译器在编译的时候会自动的生成一个与@property相对应的真私有属性,即声明在@implementation中的.
2, 自动生成setter方法的实现,在方法的内部直接将参数赋值给了它自动生成的真私有属性.
3, 自动生成getter方法的实现,在方法的内部直接返回它自动生成的真私有属性的值.
如下代码:
@interface YYPerson : NSObject
{
NSString *_name;
}
@property NSString *name;
@end
@implementation YYPerson
@synthesize name;
@end
等价于:
@interface YYPerson : NSObject
{
NSString *_name;
}
- (void)setName:(NSString *)name;
- (NSString *)name;
@end
@implementation YYPerson
{
NSString *name;
}
- (void)setName:(NSString *)name
{
self->name = name;
}
- (NSString *)name
{
return self->name;
}
@end
4> 使用注意
1, 因为@synthesize自动生成了一个与@property相对应的不带下划线的真私有属性,而使得在@interface中声明的的带下划线
的属性显得多余,因此可以将@interface中声明的的带下划线的属性注释掉;
但@synthesize自动生成的不带下划线的真私有属性又很不规范,所以@synthesize的时候使用以下格式:
@synthesize @property名称 =
定义在@interface中的带下划线的属性名,即: @synthesize name = _name;
这样写的意义:
1,@synthesize不会自动生成私有属性;
2,自动生成setter方法的实现,在方法的内部直接将参数的值赋值给后面指定的属性.
3,自动生成getter方法的实现,在方法的内部直接返回后面指定的属性的值.
此时代码如下:
@implementation YYPerson
@synthesize name = _name;
@end
等价于:
@implementation YYPerson
{
NSString *name;
}
- (void)setName:(NSString *)name
{
_name = name;
}
- (NSString *)name
{
return _name;
}
@end
2, @synthesize生成的setter方法的实现,没有逻辑判断,是直接赋值或返回的.
如果需要逻辑判断,则需要重写setter方法.
3, @synthesize也可以批量生命,数据类型不同也可以批量声明.
*/
#import <Foundation/Foundation.h>
int main(int argc,
const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
}
return 0;
}
相关文章推荐
- Objective-c - setter/getter方法的自动生成(Xcode4.4版本开始)
- Objective-C,ios,属性声明(property declarations), 自定义属性,自动生成 get 和 set 方法,getter 和 setter
- Eclipse不可不知的用法之一:自动生成Getter、Setter和构造方法
- Myeclipse 下自动生成getter和setter方法
- 记一个eclipse自动生成getter,setter方法的快捷键
- Jfinal自动生成带setter和getter等常用方法的Model文件方案--注mysql数据库版
- 使用lombok包自动生成pojo 类的getter,setter方法
- [图解教程]Eclipse不可不知的用法之一:自动生成Getter、Setter和构造方法
- Eclipse自动生成Getter、Setter和构造方法
- 属性声明(property declarations), 自定义属性,自动生成 get 和 set 方法,getter 和 setter
- Spring 自动生成getter和setter方法 tostring方法
- property生成属性的时候,同时重写setter与getter方法,那么实例变量不自动生成
- 安装lombok后,eclipse不能自动生成getter和setter方法
- [图解教程]Eclipse不可不知的用法之一:自动生成Getter、Setter和构造方法
- 玩转Eclipse — 自动生成setter和getter方法
- object c @synthesize 自动生成setter,getter方法
- Eclipse自动生成Getter、Setter和构造方法
- 基于注解处理器开发自动生成getter和setter方法的插件
- [图解教程]Eclipse不可不知的用法之一:自动生成Getter、Setter和构造方法
- MyEclipse自动生成Getter、Setter和构造方法