第27条:使用“class-continuation分类”隐藏实现细节

Objective-C动态消息系统(参见第11条)的工作方式决定了其不可能实现真正的私有方法或私有实例变量。

匿名分类的特点:

与普通的分类不同,它必须定义在其所接续的那个类的实现文件里。

唯一能声明实例变量的分类。

而该分类没有特定的实现文件,其中的方法都应该定义在类的主实现文件里。

用法:

1、向类中新增实例变量

2、在里面声明私有方法

3、隐藏类所遵循的协议

4、将主接口声明的“只读”属性弄成“可读写

时间: 2024-10-14 08:22:28

第27条:使用“class-continuation分类”隐藏实现细节的相关文章

第26条:勿在分类中声明属性

属性是封装数据的方式(参见第6条). 属性只是定义实例变量及相关存取方法所用的“语法糖”,所以也应遵循同实例变量一样的规则. 分类机制,应该将其理解为一种手段,目标在于扩展类的功能,而非封装数据. 尽管从技术上说,分类里也可以声明属性,但这种做法应该尽量避免. 原因是:除了“class-continuation分类”(参见第27条)之外,其他分类都无法向类中新增实例变量,因此,它们无法把实现属性所需的实例变量合成出来. 所以开发者需要在分类中为该属性实现存取方法. 1)此时可以把方法声明为@dy

第9条:以“类簇模式”隐藏实现细节

类簇模式把实现细节隐藏在一套简单的公共接口(抽象基类)后面.以保持接口简洁,用户无须自己创建子类实例,只需调用基类方法创建即可. 例如:UIButton 的 buttonWithType: 工厂模式是创建类簇的办法之一. OC中的系统框架中普通使用此模式. 大部分collection类都是类簇. 判断实例所属的类型信息: isMemberOfClass:    是否在相同类中,不含子类. isKindOfClass:     判断某对象是否位于类簇(基类和子类)中.

第27条:优先考虑泛型方法

如类可以从泛型中受益,方法也一样.静态工具方法尤其适合于泛型化.Collections中所有的方法是泛型化的. 一个返回两个集合的联合的例子: publlic static Set union(Set s1, Set s2) { Set result = new HashSet(s1); result.addAll(s2); return result; } 有两条警告,因为使用的是原生态类型Set. 泛型化该方法: public static <E> Set<E> union(S

[Effective JavaScript 笔记]第27条:使用闭包而不是字符串来封装代码

函数是一种将代码作为数据结构存储的便利方式,代码之后可以被执行.这使得富有表现力的高阶函数抽象如map和forEach成为可能.它也是js异步I/O方法的核心.与此同时,也可以将代码表示为字符串的形式传递给eval函数以达到同样的功能.程序员面临一个选择:应该将代码表示为函数还是字符串?毫无疑问,应该将代码表示为函数.字符串表示代码不够灵活的一个重要原因是:它们不是闭包. 闭包回顾 看下面这个图 js的函数值包含了比调用它们时执行所需要的代码还要多的信息.而且js函数值还在内部存储它们可能会引用

权限模块_使用权限_显示有权限的链接_思路分析_拦截验证每个请求的权限_完善权限的分类_一些细节

权限模块__使用权限__显示有权限的链接1__思路分析 实现功能 导入源文件,找到AnchorTag.java类复制到工程中 AnchorTag.java package org.apache.struts2.views.jsp.ui; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspException;

编写高质量的iOS代码--Effective Objective-C 2.0 读书笔记

编写高质量的iOS代码--Effective Objective-C 2.0 读书笔记 这本书年初刷完,感觉不错,介绍了很多小点,都是平日不怎么关注的. 第1章 熟悉Objective-C 这章没什么好介绍 第1条:了解Objective-C语言的起源 第2条:在类的头文件中尽量少引入其他头文件 第3条:多用字面量语法,少用与之等价的方法 第4条:多用类型常量,少用#define预处理指令 要理解为啥要少用#define预处理指令. 然后具体用哪个, 自己定吧 第5条:用枚举表示状态.选项.状态

Effective Objecttive-C 2.0

中文: 编写高质量iOS与OS X代码的52个有效方法 整体评价: 书中提出了52条建议,如果都能遵守的话,对码代码还是很有帮助的.书中记录的有些东西,现在看有点老,不过很具有参考性.如果感觉飞时间的话,直接翻看每一章最后面的[要点]总结 我把52条,稍微整理了一下,也算是,自己的一些想法吧,就是写着玩的,参考下就完事. 第1条:了解Object-C语言的起源  -- 简单介绍,可以忽略的 第2条: 在类的头文件中尽量少引入其他头文件 -- .h文件中,尽量用@class,少用#import  

effective OC2.0 52阅读笔记(四 协议与分类)

23 通过委托与数据源协议进行对象间通信 总结:委托模式的常规委托模式中,信息从类Class流向受委托者delegate.数据源模式,信息从数据源datasource流向class.数据源和受委托者可以是两个不同对象.有时候一个可选择方法可能在一个生命期中多次调用,如果每次都检查委托对象是否能响应选择子,那就显得多余了.可以使用位段(bitfield)数据类型将方法响应能力缓存起来. 24 将类的实现代码分散到便于管理的数个分类之中 总结:易于管理,便与调试.将应视为“私有”的方法归入名为Pri

Effective objective-c 2.0阅读笔记

这本书非常的好,看完后,感触挺深,总结纪录一下,针对ios开发的备忘: 注:分类和原著有些不同,自己总结学习用的,仅供参考. 系统篇: 了解oc起源:继承c,由Smalltalk演化而来.动态语言,运行期决.需要熟悉c语言. 6.  理解变量属性 a.原子性 b.读写 c.内存管理语义 d.方法名 .尽量少用atomic .注意使用copy属性避免数据安全问题. 还有oc动态语言特性,硬编码问题.类内部不要直接访问变量. 7.  还是重复了上一篇:在对象内部尽量直接访问实例变量.a.快,没有派发