您的位置:首页 > 移动开发 > IOS开发

IOS-getter和setter方法

2014-05-27 14:02 246 查看
--点语法

可以不使用[student  age],用student.age来访问变量
虽然看起来student.age是直接访问变量,但本质还是调用了方法来访问变量

为什么要设计点语法?
方便程序员快速入手OC
简化程序设计
隐藏了内存管理细节
隐藏了多线程、同步、加锁细节
方法调用
Student *stu = [[Student alloc] init];
[stu setAge:100];
int age = [stu age];

点语法
stu.age = 100;
int age = stu.age;
点语法本质

其实点语法的本质还是方法调用
当使用点语法时,编译器会自动展开成相应的方法
stu.age = 10;    展开为  

[stu  setAge:10];

int  age = stu.age;     展开为

int  age = [stu  age];
@property

@property让编译器自动生成getter和setter的声明
用@property int age;就可以代替下面的两行
- (int)age;   // getter
- (void)setAge:(int)newAge;  // setter
#import <Foundation/Foundation.h>
@interface Student {
int age;
}
- (int)age;   // getter
- (void)setAge:(int)newAge;  // setter

@property int age;
@end
@synthesize

@synthesize让编译器自动实现getter和setter
用@synthesize age;就可以代替
- (int)age{
return age;
}
- (void)setAge:(int)newAge{
age = newAge;
}
#import "Student.h"
@implementation Student 
@synthesize age;
- (int)age{
return age;
}
- (void)setAge:(int)newAge{
age = newAge;
}
@end

在类内部可以直接访问成员变量,如

age = 100;

int  temp = age + 10;

self.age不是直接访问成员变量,而是调用了getter或者setter方法

self.age = 100; 

// 相当于 [self  setAge:100];

// 不要在setAge:中写self.age = 100; 会造成死循环

int  temp = self.age + 10;  // int  temp = [self  age] + 10;

@synthesize age = _age; 展开

- (int)age{
return _age;
}
- (void)setAge:(int)newAge{
_age = newAge;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios ios平台 文档