• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Effective Objective-C 2.0 — 第七条:在对象内部尽量直接访问实例变量 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

直接访问实例变量,不经过”方法派发“(method dispatch) 速度快。

直接访问实例变量,不会调用其“设置方法”,这就绕过了为相关属性所定义的“内存管理语义”。

直接访问实例变量,不会触发“键值观测”(Key-Value Observing, KVO)通知。

    (KVO,一种通知机制,当某对象属性改变时,可通知其他对象。)

通过属性来访问有助于排查与之相关的错误,因为可以给“获取方法” or、and “设置方法” 中新增断点(breakpoint),监控该属性的调用者及其访问时机。

 

优化方案: 在对象内部读取数据时,应该通过实例变量来读,而写入数据时,则应通过属性(即setter方法)来写入。

在初始化方法及dealloc方法中,总是应该直接通过实例变量 来书写数据。

使用惰性初始化技术配置某份数据,需要通过属性来读取数据。

@interface EOCPerson : NSObject
@property (nonatomic, copy) NSString *firstName;
@property (nonatomic, copy) NSString *lastName;

- (NSString *)fullName;
- (void)setFullName:(NSString *) fullName;
@end

//实现方法
// 使用“点语法”,获取方法
- (NSString *)fullName
{
    return [NSString stringWithFormat:@"%@ %@", self.firstName, self.lastName];
}
//设置方法
- (void) setFullName:(NSString *)fullName
{
    NSArray *components = [fullName componentsSeparatedByStirng:@" "];
    self.firstName = [components objectAtIndex:0];
    self.lastName = [components objectAtIndex:1];
}

//如果不经由存取方法,而是直接访问实例变量
- (NSString *) fullName
{
    return [NSStringstringWithFormat:@"%@ %@", _firstName, _lastName];
}
- (void) setFullName:(NSString *)fullName
{
    NSArray *components = [fullName componentsSeparatedByStirng:@" "];
    _firstName = [components objectAtIndex:0];
    _lastName = [components objectAtIndex:1];
}

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap