@property
xcode4之后
在xcode4之后,@property得到增强,使用@property声明之后,会自动进行实现
@property 是一个编译器指令
简化setter和getter的声明和实现,可以使用@property来代替getter/setter方法的声明和实现
使用@property生成了getter和setter的实现,如果重写了setter方法,@property就只会生产getter方法。如果重写了getter方法,@property就只会生成setter方法
在没有声明属性的情况下,使用@property生成getter和setter方法会自动创建成员变量
#import <Foundation/Foundation.h>
@interface Person : NSObject
// 使用@property可以自动生成成员变量的getter和setter方法
// 如果该成员变量没有提前声明,则会自动声明
@property NSString *name; // 会自动生成一个 _name 的成员变量
@property int age; // 会自动生成一个 _age 的成员变量
@end
@implementation Person
@end
int main(int argc, const char * argv[]) {
Person *p = [Person new];
[p setName:@"张三"];
[p setAge:18];
NSLog(@"姓名:%@ 年龄:%i", [p name], [p age]); // 姓名:张三 年龄:18
return 0;
}
xcode4之前 (作为了解)
在xcode4之前,使用@property和@synthesize简化getter/setter方法的声明和实现
-
@property
@property 是一个编译器指令
简化setter和getter的声明,可以使用@property来代替getter/setter方法的声明 -
@synthesize
@synthesize 是一个编译器指令
简化setter和getter方法的实现,可以使用@synthesize来代替getter/setter方法的实现
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
NSString *_name;
int _age;
}
@property NSString *name; // == - (void)setName:(NSString *)name
@property int age; // == - (NSString *)name
@end
@implementation Person
@synthesize _name;
@synthesize _age;
@end
int main(int argc, const char * argv[]) {
Person *p = [Person new];
[p setName:@"张三"];
NSLog(@"名称:%@", [p name]);
return 0;
}
@property 修饰符
@property
- readwrite:默认就是该修饰符
- readonly:只读修饰符,让@property只生成getter
- getter:修改@property生成的getter的方法名
- setter:修改@property生成的setter的方法名
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property(readwrite) NSString *name;
@property(readonly) int age;
@property(getter=abc) double height;
@property(setter=tizhong:) double weight;
@end
@implementation Person
@end
int main(int argc, const char * argv[]) {
Person *p = [Person new];
[p setName:@"张三"];
NSLog(@"姓名:%@", [p name]); // 姓名:张三
// [p setAge:18]; // 没有setAge的提示
NSLog(@"年龄:%i", [p age]); // 年龄:0
[p setHeight:1.85];
NSLog(@"身高:%lf", p.abc); // 身高:1.850000
[p tizhong:165.5];
NSLog(@"体重:%lf", p.weight); // 体重:165.500000
return 0;
}
``