文件系统操作:自定义流与文件协调
1. 自定义流的创建
1.1 问题提出
在创建自定义输出流时,直接子类化 NSOutputStream 并覆盖其 -write:maxLength: 方法和初始化器可能会失败,会出现如 -[EncryptingOutputStream initWithURL:append:]: unrecognized selector sent to instance 0x104033650 这样的错误。这是因为 NSOutputStream 是一个抽象类,调用 +alloc 时返回的是私有子类 NSCFOutputStream 的实例,而自定义子类时 +alloc 会直接分配自定义子类的实例。
1.2 解决方法
要创建自定义流类,需要手动实现整个 NSStream 接口,包括打开和关闭流、获取其状态和错误、设置和获取委托,以及将其添加到或从运行循环中移除等方法。
1.3 运行循环集成
在Objective - C中向运行循环发送信号时,使用 NSRunLoop 的 -performSelector:target:argument:order:modes: 可能会导致多次向目标发送消息。正确的方法是使用 CFRunLoopSourceRef 类型的运行循环源,它可以
超级会员免费看
订阅专栏 解锁全文
10万+

被折叠的 条评论
为什么被折叠?



