点语法
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.局限性
调用一个不存在的方法 编译器会马上报错