iOS 中 Class-continuation 的使用
来源:互联网 发布:淘宝女装店铺名字潮 编辑:程序博客网 时间:2024/05/16 18:06
Objective-C 动态消息系统的工作方式 决定了 其 不可能实现真正的私有方法或者私有变量。 因为我们在运行时的时候都可以提取 出来。 但是 即使如此 ,我们最好只把确实需要对外公布的那部分内容公开,这种 不需要对外公布的 就使用 class-continuation 来实现。 笔者 总结有 四种场景下使用。尤其是在写 SDK 等情况下 一种 隐藏你不想被外部知道的类 二种情况: 使用 了Objective-C++ 混编的类但是 不想改变头文件 第三种情况 public 接口声明中 只读的 属性拓展为 “可读写 ” 第四种:隐藏 内部遵守的 协议。下面我们分别来介绍这四种情形。
第一种 场景:隐藏你不想被外部知道的类
通常 我们会这样写:
#import <Foundation/Foundation.h>
@class EOCSuperSecretClass;
@interface EOCClass : NSObject
{
// 即使声明为 private 放在公共 接口中的EOCClass依然会让外部知道有
// 有EOCSuperSecretClass这样的类存在 而这不是我们想要的
@private
EOCSuperSecretClass *_secretInstance;
}
@end
对比:
#import "EOCClass.h"
#import "EOCSuperSecretClass.h"
@interface EOCClass ()
{
// 使用这种方式来隐藏 实现的细节和我们不想给外部知道的 一些类
EOCSuperSecretClass *_superSecretClass;
}
@end
@implementation EOCClass
@end
第二种场景 使用C++的类 但是不想把 .m 文件改成 .mm 或者 也不想让外部知道里面使用了C++的类
在 EOCClass 的.m 文件中 我们这样实现。
#import "EOCClass.h"
#include "SomeCppClass.h" // 这是我们定义的某个 C++ 的类
@interface EOCClass ()
{
// 使用这种方式来 隐藏 实现的细节 和我们不想给外部知道的 一些类
SomeCppClass _someCppClass;
}
@end
@implementation EOCClass
@end
#import <Foundation/Foundation.h>
@interface EOCPerson : NSObject
@property (nonatomic,copy,readonly)NSString *firstName;
@property (nonatomic,copy,readonly)NSString *lastName;
- (instancetype)initWithFirstName:(NSString *)firstName
lastName:(NSString *)lastName;
@end
@interface EOCPerson ()
@property (nonatomic,copy,readwrite)NSString *firstName;
@property (nonatomic,copy,readwrite)NSString *lastName;
@end
#import "EOCPerson.h"
#import "EOCSecretDelegate.h"
@interface EOCPerson ()<EOCSecretDelegate>
@end
@implementation EOCPerson
/* some Code */
@end
- iOS 中 Class-continuation 的使用
- 关于webwork中continuation用法的说明
- 编写高质量OC代码52建议总结:27.使用“class-continuation 分类” 隐藏实现细节
- Continuation的实现机制
- html中class 的使用
- iOS中#import和@class的区别
- iOS中#import和@class的区别
- iOS中#import和@class的区别
- ios中#import与@class的区别
- IOS基础中@class的含义
- iOS:iOS8开发(二)~storyboard中autolayout和size class的使用详解
- IOS基础:深入理解Objective-c中@class和#import的使用区别
- iOS:iOS8开发storyboard中autolayout和size class的使用详解 (2)
- java中Class类的使用
- vbs中class的使用示例
- vbs中class的使用示例
- ASP.NET中Partial Class的使用
- class中static const int的使用
- Lucene初识HelloWorld
- ASCII码表
- Amazon S3服务 简介及基本概念
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
- 论权限管理
- iOS 中 Class-continuation 的使用
- 解决Duilib list控件,removeall() 时存在内存泄露的问题
- 如是杂感
- 2017.07.03 没写日记
- 使用concat函数完成like参数化查找
- JavaScript学习之大小写转换
- MYSQL问题解决方案:Access denied for user 'root'@'localhost' (using password:YES)(亲测解决)
- POJ 1018--Communication System
- 数据库分库分表(sharding)