
目录
一,条件编译
二,KVO/KVC
三,Swift调用OC
四,OC调用Swift
五,字符串
六,多线程
一,条件编译
1,代码标记

2,条件编译

3,信息打印

4,版本检测

5,API可用性

6,程序入口

二,KVO/KVC
1,选择器
- 必须是被
@objcMembers或@objc修饰的方法才可以定义选择器

2,协议可选方法
- 可以用
@objc将方法定义为可选的,这种协议只能被类遵守

3,dynamic
- 被
dynamic修饰的内容具有动态性,比如:调用方法会走runtime消息发送流程


4,KVO/KVC
-
Swift支持KVO/KVC的条件: - 属性所在的类、监听器最终继承自
NSObject - 用
dynamic修饰对应的属性


5,关联对象
- 默认情况下,在
extension中不可以添加存储属性

6,资源名管理



三,Swift调用OC
1,条件
- 新建一个桥接头文件,文件名格式默认为:
{targetName}-Bridging-Header.h - 在头文件中
#import需要暴露给Swift使用的文件

2,OC代码


3,Swift代码

4,修改函数名
- 如果
C语言暴露给Swift的函数名跟Swift中其他的函数名冲突了,可以在Swift中使用@_silgen_name修改C语言的函数名

四,OC调用Swift
1,条件
-
Xcode默认生成了一个用于OC调用Swift的头文件,文件名格式是:{targetName}-Swift.h -
Xcode会根据Swift代码生成对应的OC声明,并写入该头文件中


2,Swift代码
- 暴露给
OC的类需要最终继承自NSObject - 使用
@objc修饰需要暴露给OC的成员 - 如果想要所有成员都暴露给
OC,就使用@objcMembers来修饰类

3,OC代码

4,修改符号名
- 可以通过
@objc重命名暴露给OC的符号名(类名、属性名、方法名等)


5,调用方法
- 暴露给
OC的类为何需要继承自NSObject?
OC调用方法会走消息发送流程,消息发送流程需要用到isa指针,而isa指针是在NSObject中定义的
-
OC和Swift调用方法的区别?
OC调用方法是走消息发送流程,不论是OC调用Swift方法,还是Swift调用OC方法;Swift调用方法是用虚表来实现的
五,字符串
1,String
- 基本使用

- 插入删除

- 多行

2,Substring
- 子串类型不是
String,而是Substring -
Substring和它的base,共享一份数据 -
Substring发生修改或者转为String时,才会分配新的内存


3,Character

4,NSString
-
NSString和String可以用as直接互相转换 -
NSMutableString可以用as转换为String,反之则不可以


六,多线程
1,异步

2,延迟

3,once
-
dispatch_once在Swift中已被废弃 - 可以用类型属性或者全局变量/常量来实现
- 默认自带
lazy+dispatch_once的效果


4,加锁
