标签:
1 合成存取方法
为成员变量实现setter和getter方法,虽然并不难,但如果一个类中包含10个甚至更多的成员变量,为每个成员都编写setter、getter方法將是一件令人反胃的事情。OC语言提供了自动合成setter和getter方法,而且如果开发者需要自己控制某个setter和getter方法的实现,开发者依然可以提供setter和getter方法,这个由开发者自定义的setter和getter方法将会覆盖系统自动合成的setter和getter方法。
系统自动合成setter和getter的方法如下:
1、在类的声明部分使用@property指令,比如@property int age;系统会自动生成如下语句:
- (void)setAge:(int)age;
- (int)age;
2、在类的实现部分使用@synthesize指令,比如@synthesize age = _age;,其中_age是在声明部分的成员变量,系统就会自动实现setter和getter方法
#import <Foundation/Foundation.h> #import "Person.h" int main() { Person *p = [Person new]; p.age = 23; int c = p.age; p.name = @"guopeng"; NSString *gp = p.name; NSLog(@"%d%@",c,gp); return 0; }
#import <Foundation/Foundation.h> @interface Person : NSObject { int _age; NSString *_name; } - (void)setAge:(int)age; - (int)age; - (void)setName:(NSString *)name; - (NSString *)name; @end
#import "Person.h" @implementation Person - (void)setAge:(int)age { _age = age; } - (int)age { return _age; } - (void)setName:(NSString *)name { _name = name; } - (NSString *)name { return _name; } @end
@public : 在任何地方都能直接访问对象的成员变量
@private : 只能在当前类的对象方法中直接访问(@implementation中默认是@private)
@protected : 可以在当前类及其子类的对象方法中直接访问 (@interface中默认就是@protected)
@package : 只要处在同一个框架中,就能直接访问对象的成员变量
@interface和@implementation中不能声明同名的成员变量
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... NSLog(@"Hello, World!"); } return 0; } #import <Foundation/Foundation.h> @interface Person : NSObject @end #import "Person.h" @implementation Person @end
21-黑马程序员------OC 语言学习笔记---点语法和作用域
标签:
原文地址:http://www.cnblogs.com/iceshan/p/4492879.html