UIView CALayer
UIView是IOS系统中界面元素的基础,所有的界面都继承于它,它真正的绘图部分是 CALayer,UIView更像是一个CALayer的管理器,访问他的frame,bounds等跟绘图和坐标有关的属性,实际上都是在访问其内部的CALayer的相关属性
CALayer三种树
- 逻辑树,这里是开吗可以操纵的
- 动画树,一个中间层,系统在这一层上更改属性,进行各种渲染操纵
- 其内容是当前正被显示在屏幕上的内容
NSNotification
在发送消息时是同步的
想要异步,可在接受消息时使用dispatch_async进行异步处理
静态库 动态库
静态库: .a
动态库: .framework
无论动态库还是静态库,都是区分真机和模拟器的,需要使用lipo命令进行合并
编译器会将静态库文件装入程序空间,
动态库执行到相关函数才会被调用
统计字符串
考虑NSString中包含有Emoji等特殊字符时length不准确的情况。可以enumerateSubstrings遍历计算,也可以用lengthOfBytesUsingEncoding算出全部转换为UTF-32的情况下的大小,然后除以4算出字符个数.
switch vs if
switch语句表达式只能处理的是整型和枚举类型,而if选择流程语句则没有这样的限制,但switch语句比选择流程语句更高效
if else 是一条比较指令,需要遍历条件分支直到命中条件
switch 是一张地址表,只需要访问对应索引号的表项就能定位分支,可以理解为以空间换时间
栈 vs 堆
栈:由编译器在需要的时候分配,在不需要的时候自动清除的变量存储区
栈是先进后出的队列
堆:用new分配的内存块,由程序员控制
self = [super init]
容错处理
由于继承的关系,子类是需要拥有父类的实例和行为,因此,必须先初始化父类,然后再初始化子类
从A界面跳转到B界面
pushViewController A的viewDidDisappear先调用
presentViewController B的viewDidAppear先调用
OC数据类型有哪些,和C的基本数据类型有什么区别
OC的数据类型有NSString NSNumber NSArray NSData 等,这些都是class,创建之后就是对象
C语音的基本数据类型int只是一定字节的内存空间,用于存放数值
id声明的对象有什么特性
id声明的对象具有运行时的特性,可以指向任意类型的OC对象
什么时候需要在程序中创建内存池
用户自己创建的数据线程
ios系统架构
core os layer 核心操作系统
core services 核心服务层
media layer 媒体层
cocoa touch layer 界面服务层
判断yes
BOOL: if (a)
int: if (a=0)
float: if (a<0.000001 && a>-0.000001)
pointer: if (a==NULL)
xib weak
相当于xib/sb对这个button是强引用
storyboard(xib不行)创建vc时,会有一个_topLevelobjectsToKeepAliveFromStoryboard的私有数组强引用所有的控件,所以这时即便outlet声明成weak也没关系
/#import /#include
/#import OC导入用户头文件 不会重复导入
/#import <>导入系统头文件
/#include C/C++导入头文件
@class 告诉编译器某个类的声明,当执行时采取查看类的实现文件,可以解决头文件的相互包含
isMemberOfClass isKindOfClss
isKindOfClass 确定一个对象是否是一个类的成员,确定一个对象是否派生自该类的类成员
isMemberOfClass 确定一个对象是否是一个类的成员
如果ClassA派生自NSObject类
ClassA *a = [[ClassA alloc] init];
[a isKindOfClass:[NSObject class]];可以检查出a是否是NSObject的派生类
isMemberOfClass不能
网友评论