Objective-C 点语法 成员变量的作用域 @property和@synthesize关键字 id类型

点语法

1.利用点语法替换set方法和get方法

方法调用

Student *stu = [Student new];

[stu setAge : 18];

int age = [stu age];

点语法

stu.age = 18;

int age = stu.age;

2.点语法的本质

其实点语法的本质还是方法调用

当使用点语法的时候 编译器会自动展开成相应的方法

3.死循环注意

- (void) setAge : (int) age {
    self.age = age;//会引起死循环
}

- (int) age {
    return self.age;//会引起死循环
}

成员变量的作用域

@private: 只能在当前类的对象方法中直接访问

@protected: 可以在当前类及子类的对象方法中直接访问

@public: 任何地方都可以直接访问

@package: 同一个'体系内'(框架)可以访问 介于@private和@public之间

@property和@synthesize关键字

1.@property用在@interface中 用来自动生成set和get的声明

#import <Foundation/Foundation.h

@interface Person : NSObject {
    int _age;
}
//- (void) setAge : (int) age;
//- (int) age;
@property int age;//一定不能带_ 注意我的命名规范
@end 

2.@synthesize用在@implementation中 用来自动生成set和get的实现

@implementation Person
//- (void) setAge : (int) age {
//    _age = age;
//}
//- (int) age {
//    return _age;
//}
@synthesize age = _age;//注意我的命名规范
@end

3.@synthesize的细节

A: @synthesize age = _age;

set和get实现中会访问成员变量_age 如果成员变量_age不存在 就会自动生成一个@private的成员变量_age

B: @synthesize age;

set和get实现中会访问成员变量age 如果成员变量age不存在 就会自动生成一个@private的成员变量age

C: 手动实现

若手动实现了set方法 编译器就只会自动生成get方法

若手动实现了get方法 编译器就只会自动生成set方法

若同时手动实现了set和get方法 编译器就不会自动生成不存在的成员变量

4.@property 新特性

自从Xcode4.x后 @property就独揽了@synthesize的功能 也就是说 @property可以同时生成set和get的声明和实现

默认情况下 set和get方法中的实现 回去访问下划线'_'开头的成员变量

id类型

1.简介

万能指针 能指向任何OC对象 相当于NSObject * 

2.使用

id p = [Person new];//注意: id后面不要加 *

3.局限性

调用一个不存在的方法 编译器会马上报错

posted @ 2015-06-25 14:20  梦三  阅读(2355)  评论(0编辑  收藏  举报