数据的传输和获取,通常会涉及到数据的压缩和解压等操作
Swift入门篇
变量申明
变量用var,常量用let;可以显示指明变量数据类型,也可以隐式由变量赋值决定。如果是可以为nil的变量,需要用可选符号?
修饰。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 let a: NSInteger = 12
var b = 13
b = 15
print(a+b)
//2***********?
var mayNilStr: String? = "hello"
// var str: String = "world"
mayNilStr = nil
// str = nil
print("\(mayNilStr)")
//3********** ??(如果变量为nil,则取??之后的值)
var yourName :String? = nil
yourName = "Tom"
let defaultName = "Jack"
let greet = "hello \(yourName ?? defaultName)"
print(greet)
Xcode的BuildSetting配置说明
是否采用ARC
- 某个文件采用ARC,可以在
Build Phases
中的Compile Sources
中找到该类,双击修改Compiler Flags
为-fobjc-arc
。 - 某个文件采用MRC,可以在
Build Phases
中的Compile Sources
中找到该类,双击修改Compiler Flags
为-fno-objc-arc
。
全局宏定义
一个workspace/project如果包含多个target或者scheme,可以在BuildSetting->Preprocessing->Preprocessor Macros
中定义自己的宏来区别对待多target喝scheme等
第三方库路径配置
有时第三方库(一般是.a之类的)引入时,查找路径没配好,可能导致编译失败。可以在BuildSetting->SearchPaths
中修改库的查找路径为相对路径(不要用本地的绝对路径)
ios各种指针说明
strong、weak、unsafe_unretained、autoreleasing、copy说明
- strong 指针的默认类型。该指针指向的对象在指针存活期间一直存在,不会被销毁。
- weak 当没有strong指针指向对象时,weak指针指向的对象将被销毁,同时weak指针为变为nil。
- unsafe_unretained 该指针指向的对象销毁时,该指针不会被置为nil,而是被挂起(类似野指针)。
最好别用
- autoreleasing 一般指向函数的参数类型为
id *
并且自动释放的参数。 - copy 类似strong,但是会复制一份新的对象(即指向新的内存地址),新指向的对象存活期同strong。
参考链接
堆和栈的区别
堆栈
栈用于静态内存分配,堆用于动态内存分配,它们都存储在内存RAM里。
栈
- 栈上面的变量一般编译时就分配好了(如函数临时变量等)。栈遵循LIFO(后进先出),非常方便管理。
- 栈的内存分配一般由系统管理,开发者无需关心。
- 读取栈上的变量速度很快。
- 当一个方法function被调用时,它会被push进栈中,该方法中的参数和局部变量存储在栈中,当方法执行完后,该方法pop出来,相应的栈空间被释放。
堆
- 堆上的变量,一般在程序运行期分配。
- 读取堆上数据速度较慢。
- 堆上的元素能够在任何时候被读取,开发者也能够在任何时候申请堆内存空间并且释放申请的空间,所以管理堆上的变量比较复杂。
- 通常我们说的内存管理实际上是指堆内存管理。
- 堆的大小仅受限于虚拟内存的大小。
说明
多线程开发中,每一个线程都有自己独立的栈,但是它们共享堆。