并不一定要要为自己的类创建初始化函数。如果不需要设置任何状态 或者alloc方法将内存清零的默认行为相当不错 则不必去在意init方法
如果创建了一个指定初始化函数 则一定要在自己的指定的初始化函数中调用超类的指定初始化函数
如果初始化函数不止一个 则需要选择一个指定初始化函数 被选定的初始化函数应当调用超类的指定初始化函数
要按照指定初始化函数的形式实现所有的初始化函数
@property 预编译指令的作用是自动声明属性的setter和getter方法
@synthesize 表示创建该属性的访问预编译代码
复制对象,为什么不保留对象?
复制字符串参数 一种常见的错误就是从用户界面如文本框中获得一个字符串 并将其作为某事物的名称使用
文本框中的字符串通常都是可以变字符串会因为用户输出新的内容而发生变化
复制字符串可以防止因意外的变化而产生不利的影响
不保留对象是因为有一种特殊的情况叫做保留死循环 它会令引用计数器发生鼓掌 如果两个
实体是拥有和被拥有的关系 一般的规则是所拥有着对象保留被拥有者的对象而不是被拥有者的对象保留所有者的对象
类别是一种为现有的类添加新方法的方式~~~~
类别的缺陷:
1.无法向类中添加新的实例变量 类别没有空间容纳实例变量
2.名称冲突,也就是类别中的方法和现有的方法重名 当发生名称冲突时 类别具有更高的优先级
类别的主要用途:
1.将类的实现代码分散到多个不同文件或框架中
2.创建对私有方法的前向引用
3.向对象添加非正式协议