黑马程序员之ios学习总结——09 OC语言的点语法、@property和@synthesize

OC的点语法其实就是setter和getter的另一种写法。

例如:传一个人的年龄为10岁,并调用getter返回成员变量_age的值。

Person.h文件(声明类的成员变量和方法)

#import 

@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 
#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 

@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这个词了,以前老版本写的代码还是会用到的。如果有什么错误,希望大家多多指教哦。

你可能感兴趣的:(黑马程序员之ios学习总结——09 OC语言的点语法、@property和@synthesize)