概述:点语法的作用,@property @synthesize 如何使用,编译器如何对其进行展开,@property的其它属性

1)点语法的作用:

个人觉得点语法的引入就是为了方便不写[],以下面代码为切入点,介绍

int;

//[]调用实现方式
Dog *dog = [[Dog alloc] init];
[dog setAge:100];
int dogAge = [dog age];
NSLog(@"Dog Age is %d",dogAge);
//.方法调用实现方式
dog.age = 200;
dogAge = dog.age;
NSLog(@"Dog Age is %d",dogAge);

点语法是编译器级别的:

dog.age = 200;

//等同于 [dog setAge:200];

dogAge  = dog.age;

//等同于dogAge  = [dog age];

编译器会把dog.age = 200;展开成[dog setAge:200];


2)@property属性

@property 属性是让编译器在类声明文件中自动产生set,get方法的声明

3)@synthesize属性

@synthesize属性是让编译器在类实现文件中自动产生set,get方法


举例:

@

=

//Dog.h
//在类声明文件中
#import <Foundation/Foundation.h>
@interface Dog: NSObject
{
    int _age;
}
//setter and getter functions;
//-(void)setAge:(int)newAge;
//-(int)age;
@property int age
@end
//Dog.m
//在类实现文件中
#import "Dog.h"
@implementation Dog
@synthesize age = _age;
// 1行 = 下面6行
//-(void)setAge:(int)newAge
//{
//     age = newAge;
//}
//-(int)age
//{
//     return age;
//}
@end
//Dog.h
//在类声明文件中
#import <Foundation/Foundation.h>
@interface Dog: NSObject
{
    int age;
}
//setter and getter functions;
//-(void)setAge:(int)newAge;
//-(int)age;
@property age
@end
//Dog.m
//在类实现文件中
#import "Dog.h"
@implementation Dog
@synthesize age;
// 1行 = 下面6行
//-(void)setAge:(int)newAge
//{
//     age = newAge;
//}
//-(int)age
//{
//     return age;
//}
@end


4)@property的其它属性

readwrite(缺省,可读写的,就是说可以使用get,set)

readonly 表示是只读,只能get

assign(缺省)

retain

copy

上面三个后面会学到用于内存管理,表示属性如何存储

nonatomic 表示不用考虑线程安全问题

getter=...,setter=... 这种可以重新设置get和set函数