分身不乏术,Objective-C的多线程
我们在现实生活中,往往会在统一调时间线上同时做好几件事情, 比如刷牙的时候看手机,为了不浪费时间,我们总是同时进行两件三件甚至更多的事情;而在编程的世界中, 我们可以通过软件或者硬件上实现多个线程并发执行的技术来做到类似现实世界中的行为, 这就叫做多线程;能够大大提升整体处理性能;
很多编程语言都实现了这种功能,java, .net,C++, php的pthreads和swoole,oc当然也不例外, 下面我们就来了解一下我们在oc中会经常用到的多线程技术GCD和NSOperation,NSOperationQueue;
GCDGCD的好处能够充分利用iOS或者macOS多核心的特性,大大提高整体的处理性能和计算能力;
GCD的队列和任务任务即一个操作行为,或者是要执行的代码块; 类似买票的行为,即一个任务;
队列执行任务的调度池, 用来存放任务,一个一个的任务被创建好之后放入队列中等待执行; 采用先进先出的原则,类似排队买票的行为;
同步队列(sync)添加任务同步队列,任务会一个接着一个去执行,后一个任务等待前一个任务的完毕状态; 同步队列不会开启新的线程; 类似一个窗口买票的而 ...
拥抱一下沉默的 NSString 吧~
NSString 作为作为OC的一种数据类型, 他帮我们做了很多事情, 而且也是我们在项目中运用频率很高的一个数据类型.我们经常会对它进行各式各样的操作,生成新的字符串,修改,查找,比较等等. 但是有人可能会问, 既然我已经有C的字符串了,为撒子还要在定义一个字符串对象呢? 嘿嘿,首先,我们使用NSString对象来处理字符串操作, 一方面是可以统一很多方面的东西,比如api, 例如NSArray,NSDictionary中都是存放的对象, 而且使用NSString还可以使用isKindofCLass的很多常用查询. 假如我们真的去使用了C的字符串去替代NSString的话, 那我们光是桥接代码就会让人写到吐,因为字符串在使用中的频率还是比较高的. 在和其他数据对象进行联合使用的时候,那种怪异的语法肯定也会让使用者大呼痛苦的. 向来注重用户体验的苹果肯定不会这样子干的,所以,定义一个NSString 对象还是很必要的. NSString 主要的方法都在 Foundation/NSString.h 中定义, 提供了很多的方法接口
常量字符串12NSString *name = @&qu ...
iOS block详解
什么是Blockblock又叫块对象, 是MacOS X 10.6 以及 iOS4.0 平台下都可以使用的功能,block不是oc的实现, 而是c语言的实现; 与其他编程语言中的闭包
如何定义一个块对象1^(返回值类型)(参数列) {表达式主体}
无参数无返回值1234void(^testBlock)(void) = ^(void){ NSLog(@"无参数无返回值");}testBlock();
无参数有返回值1234int(^testRetunValueBlock)(void) = ^(int){ return 100;}int value = testRetunValueBlock();
有参数无返回值1234void(^ testParamsBlcok) (NSString *) = ^(NSString *string){ NSLog(@"%@",string);};testParamsBlcok(@"hhh& ...
从 NSObject 占用的内存说起
之前iOS的一个 git 仓库看到一个面试问题, 一个 NSObject 对象占用多少内存, 看到这个面试题以后我想不是4个就是8个嘛, 因为之前我打印过 64位设备下 NSString 对象的内存大小就是8; 可是答案却有一点出乎意料, 是16, 于是我就找了些资料进行了一下深入的研究, 果然…..
我们都知道, Objective-C 底层是使用 C和C++ , oc 的对象基本就是 C/C++的结构体;我们将 oc 的 m 文件使用 clang 编译后输出 cpp, 代码会告诉你对象的数据结构是类似如下所示的一个结构体:使用命令行将 .m 转成 cpp文件:
1234567命令行xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc OC源文件 -o 输出的CPP文件eg:xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m -o main.cppstruct NSObject_IMPL { Class isa;} ...
iOS中for 和 for-in 循环数组的小区别
在 OC 开发中, 数组是我们经常会用到的数据结构;而对数据进行遍历是很常见的操作, OC也为我们提供一下几种常用的操作:
for 循环,普通遍历
for-in,快速 遍历
Block
枚举器NSEnumerator
之前大部分情况下都是用for循环进行普通遍历, 但前几天我使用 for-in 去遍历一个数据的时候却报了异常;
代码如下:
123456789NSMutableArray *testArray = [NSMutableArray arrayWithObjects:@"耐克",@"阿迪达斯",@"李宁",@"匡威",nil];for(NSString *temp in testArray){if{[temp isEqualToString:@"阿迪达斯"]){NSLog(@"我不喜欢");[testArray removeObjective:temp];}}
报错信息如下:
1Collection & ...
