
系统框架
Win_77
iOS开发工程师,坐标北京,学习分享计算机开发知识。
展开
-
别忘了NSTimer会保留其目标对象
[NSTimer scheduledTimerWithTimeInterval:(NSTimeInterval) target:(nonnull id) selector:(nonnull SEL) userInfo:(nullable id) .原创 2021-01-26 13:09:46 · 173 阅读 · 0 评论 -
精简initialize与load的实现代码
NSObject类有两个初始化方法: 1、+(void)load 必定会调用此方法,而且仅调用一次。 当包含类或分类的程序库载入系统时,在iOS平台下,肯定会在此执行。如果分类和其所属的类都定义了load方法,则先调用类里的,再调用分类里的。 在load方法中使用其他类是不安全的。 如果某个类本身没实现load方法,那么不管其各级超类是否实现此方法,系统都不会调用。 load方法务必实现得精简一些,因为整个应用程序在执行load方法时都会阻塞。 其真正用途仅在于调试程序。 2、+(void)原创 2021-01-26 11:35:07 · 122 阅读 · 0 评论 -
构建缓存时选用NSCache而非NSDictionary
NSCache类更好,它是Foundation框架专门为处理存储任务设计的。 比NSDictionary好的地方在于: 1、当系统资源将要耗尽时,它可以自动删减缓存。 2、NSCache还会先行删减“最久未使用的”对象。 3、NSCache并不会“拷贝”键,而是会“保留”它,用NSDictionary实现需要用到无缝衔接技术。 4、NSCache是线程安全的,意思是:在开发者自己不编写加锁代码的前提下,多线程便可以同时访问NSCache。 #import <Foundation/Foun原创 2021-01-26 10:30:49 · 240 阅读 · 0 评论 -
对自定义其内存管理语义的collection使用无缝桥接
无缝桥接可以在C类型和Objective-C类型之间平滑转换。 NSArray *ary = @[@1, @2, @3, @4, @5]; CFArrayRef aCFArray = (__bridge CFArrayRef)ary; NSLog(@"数组大小:%li", CFArrayGetCount(aCFArray)); __bridge告诉ARC如何处理转换所涉及的Objective-C对象。 有的时候Objective-C对象具有优势,有时候C数据结构具备优势。 Foundation框架原创 2021-01-25 21:19:30 · 166 阅读 · 0 评论 -
多用块枚举,少用for循环
基于块的遍历方式: [ary enumerateObjectsUsingBlock:^(NSNumber *obj, NSUInteger idx, BOOL * _Nonnull stop) { int i = [obj intValue]; if (i == 30) { *stop = YES; } NSLog(@"输出:%d", i); }]; NSDictionary *dict = @{@"a" : @(1), @"b" : @(2)原创 2021-01-25 17:33:34 · 137 阅读 · 0 评论 -
熟悉系统框架
系统框架中藏有很多丰富的功能。 将一系列代码封装为动态库,并在其中放入描述其接口的头文件,这样做出来的东西就叫框架。iOS原生的都是动态库。 现在我们自己开发供别人使用的大多都是静态库,这是因为iOS应用程序不允许在其中包含动态库。 Foundation框架是所有Objective-C应用程序的”基础“。 NSLinguisticTagger可以解析字符串并找到其中的全部名词、动词、代词等。 CoreFoundation框架也是很重要的,Foundation中的许多功能都可以在其中找到对应的C语言原创 2021-01-25 16:51:20 · 147 阅读 · 0 评论