OC的点语法其实就是setter和getter的另一种写法。
例如:传一个人的年龄为10岁,并调用getter返回成员变量_age的值。
Person.h文件(声明类的成员变量和方法)
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
int _age;
NSString *_name;
}
- (void)setAge:(int)age;
- (int)age;
- (void)setName:(NSString *)name;
- (NSString *)name;
@end
Person.m 文件#import "Person.h"
@implementation Person
- (void)setAge:(int)age
{
//self.age = age 会引发死循环
NSLog(@"setAge:");
}
- (int)age
{
NSLog(@"age");
return _age;
}
- (void)setName:(NSString *)name
{
_name = name;
}
- (NSString *)name
{
return _name;
}
@end
set方法里面不调用[self setAge:age]/self.age = age;方法,会引发死循环,因为是调用当前对象的
setAge:方法。
main函数
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[])
{
Person *p = [Person new];
// 点语法的本质还是方法调用
p.age = 10; // [p setAge:10];
int a = p.age; // [p age];
p.name = @"Jack";
NSString *s = p.name;
NSLog(@"%@", s);
return 0;
}
关键字
:@property
它可以自动生成某个成员变量的setter和getter声明,在Xcode5以后,@property还可以实现setter和getter。
Person.h文件
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property int height;
@property NSString *name;
@end
编译器会自动生成_height,_name成员变量(是protect被保护的变量),并且生成setter和getter的方法声明。现在的Xcode6.1,@property也能对setter和getter方法进行实现。
关键字:@implementation
作用:在.m文件自动生成成员变量的setter和getter方法的实现。
Person.m文件
#import "Person.h"
@implementation Person
// @synthesize自动生成_height、_name的setter和getter实现,并且会访问_height、_name成员变量
@synthesize height = _height;
@synthesize name = _name;
@end
在新版的Xcode中,不用@implementation这个词了,以前老版本写的代码还是会用到的。如果有什么错误,希望大家多多指教哦。