ios 为什么用category而不用继承

2025-12-17 23:31:50
推荐回答(1个)
回答1:

1、Objective-C类重继承采用协议
重继承采用协议
2、#import#include区别#import> 跟 #import""区别
#import能避免文件重复包含问题:
1. 般说导入objective c文件用#import包含c/c++文件用#include
使用include要注意重复引用问题:
class Aclass B都引用class Cclass D若引用class A与class B,报重复引用错误
2. #import 确定文件能导入使递归包含现问题
所#import比起#include处避免重复引用问题所OC我基本用都import

#import> 包含iOS框架类库类#import""包含项目自定义类
3、Category扩展类式用继承类目
Category类目用类目继承要满足a is a b关系类目需要满足a has a b关系局限性更用定义类能扩展类功能能类定义放同源文件, 用Category重写类仅本Category效影响其类与原类关系
4、延展作用
延展(extension):自类实现文件添加类目声明私
5、类实例(员)变量@protected ,@private,@public声明各含义
@protected:受保护该实例变量能该类其类内访问其类内能访问
@private:私该实例变量能该类内访问其类内能访问
@public:共该实例变量谁都访问
6、id声明象特性
? 没 * 号
? 态数据类型
? 指向任何类象(设置nil)关其具体类型
? 运行检查其具体类型
? 其发送任何(存)消息
7、委托委托委托双property声明用属性
委托:象保存另外象引用引用象实现事先确定协议该协议用于引用象变化通知给引用象

委托委托双property声明属性都assignretain
避免循环引用造内存泄露
循环引用问题理解:
比main函数创建两类象AB现引用计数都1现让AB互相引用(A属性B象属性说明retain;B属性A象属性说明retain)现两象引用计数都增加1都变2
现执行[A release]; [B release]; 创建象main函数已经释放自象所权AB引用计数都1互相引用
发现AB释放要想释放A必须先释放BBdealloc再释放A同理要想释放B必须先释放AAdealloc再释放B所两象直存内存释放所谓循环引用问题
要想解决问题般引用属性设置assign,retain处理
8、浅拷贝深拷贝区别
浅层复制:复制指向象指针复制引用象本身
深层复制:复制引用象本身
意思说我A象复制份A_copy象于浅复制说AA_copy指向同内存资源复制指针象本身资源份我A_copy执行修改操作,发现A引用象同修改其实违背我复制拷贝思想深复制理解,内存存两份独立象本身
用网哥通俗:
浅复制比影完蛋影完蛋
深复制比克隆完蛋克隆着