s.h #import <Foundation/Foundation.h> @interface Student : NSObject { @public NSString *_name; int _age; int _height; } // @property能够自动生成set和get方法的 声明 // @property 成员变量类型 成员变量名称(去掉下划线); //- (void)setName:(NSString *)name; //- (NSString *)name; @property NSString *name; @end s.m /** 问题:想要给自己不带下划线的成员变量进行赋值,怎么办?> 需要给@synthesize指定,告诉该赋值给谁. @synthesize name = _name; 它就知道,赋值_name; */ #import "Student.h" @implementation Student @synthesize name; //生成了getset方法的实现 //- (void)setName:(NSString *)name //{ // name = name; // NSLog(@"%p",name); //} //- (NSString *)name //{ // // return name; //} @end main.m #import <Foundation/Foundation.h> #import "Student.h" int main(int argc, const char * argv[]) { @autoreleasepool { Student *s = [Student new]; s.name = @"亚索"; // 这步能够调用,证明@property生成了set和get方法的声明. [s setName:@"亚索"]; // 证明@synthesize生成了set和get方法的实现. NSLog(@"%p",s->name); NSLog(@"-----"); } return 0; }
@property增强使用
- Xcode4.4版本以后支持的
- 只使用 @property 进行声明,类自动帮你实现。
Xcode4.4以后property做了增强
- 帮助我们自动生成get/set方法的声明
- 帮助我们自动生成get/set方法的实现
s.h /** @property的加强用法: 1.生成set和get方法的声明 2.生成set和get方法的实现 3.生成带下划线的成员变量. 注意事项: 1. 当用户手动重写了set方法时,@property会生成get方法和带下划线的成员变量 2. 当用户手动重写了set和get方法时.@property不会生成待下划线的成员变量. 3. 当用户手动重写了get方法时,@property会生成set方法和带下划线的成员变量. */ #import <Foundation/Foundation.h> #import "Person.h" @interface Student : Person @property NSString *name;//生成的变量名是_name, @property int age; @property int height; @property int weight; @end s.m #import "Student.h" @implementation Student //@synthesize age = _age,height = _height,weight = _weight,name = _name; //手动重写get方法 - (NSString *)name { return _name; } - (instancetype)init { if (self = [super init]) { NSLog(@"s---%@",self); NSLog(@"s---%@",super.class); } return self; } @end
本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/5311330.html,如需转载请自行联系原作者