55
66> 题目出处: zhuanlan.zhihu.com/p/22834934
77
8- - [ 谈下iOS开发中知道的哪些锁?] ( #谈下ios开发中知道的哪些锁 )
9- - [ iOS下如何实现指定线程数目的线程池?] ( #ios下如何实现指定线程数目的线程池 )
10- - [ 如何用HTTP实现长连接?] ( #如何用http实现长连接 )
11- - [ HTTP的post和get啥区别] ( #http的post和get啥区别 )
12- - [ 使用atomic一定是线程安全的吗?] ( #使用atomic一定是线程安全的吗 )
13- - [ 数据库建表的时候索引有什么用?] ( #数据库建表的时候索引有什么用 )
14- - [ 介绍下iOS设备获取唯一设备号的历史变迁] ( #介绍下ios设备获取唯一设备号的历史变迁 )
15- - [ 如何使用runtime
8+ - [ 谈下iOS开发中知道的哪些锁?] ( #谈下ios开发中知道的哪些锁 )
9+ - [ iOS下如何实现指定线程数目的线程池?] ( #ios下如何实现指定线程数目的线程池 )
10+ - [ 如何用HTTP实现长连接?] ( #如何用http实现长连接 )
11+ - [ HTTP的post和get啥区别] ( #http的post和get啥区别 )
12+ - [ 使用atomic一定是线程安全的吗?] ( #使用atomic一定是线程安全的吗 )
13+ - [ 数据库建表的时候索引有什么用?] ( #数据库建表的时候索引有什么用 )
14+ - [ 介绍下iOS设备获取唯一设备号的历史变迁] ( #介绍下ios设备获取唯一设备号的历史变迁 )
15+ - [ 如何使用runtime
1616 hook一个class的某个方法,又如何hook某个instance的方法?] ( #如何使用runtime-hook一个class的某个方法又如何hook某个instance的方法 )
17- - [ 聊下HTTP的POST的body体使用form-urlencoded和multipart/form-data的区别。] ( #聊下http的post的body体使用form-urlencoded和multipartform-data的区别 )
18- - [ 通过\[ UIImage
17+ - [ 聊下HTTP的POST的body体使用form-urlencoded和multipart/form-data的区别。] ( #聊下http的post的body体使用form-urlencoded和multipartform-data的区别 )
18+ - [ 通过\[ UIImage
1919 imageNamed:\] 生成的对象什么时候被释放?] ( #通过uiimage-imagenamed生成的对象什么时候被释放 )
20- - [ applicationWillEnterForeground和applicationDidBecomeActive都会在哪些场景下被调用?举例越多越好。] ( #applicationwillenterforeground和applicationdidbecomeactive都会在哪些场景下被调用举例越多越好 )
21- - [ 如何终止正在运行的工作线程?] ( #如何终止正在运行的工作线程 )
22- - [ iOS下所有的本地持久化方案?] ( #ios下所有的本地持久化方案 )
20+ - [ applicationWillEnterForeground和applicationDidBecomeActive都会在哪些场景下被调用?举例越多越好。] ( #applicationwillenterforeground和applicationdidbecomeactive都会在哪些场景下被调用举例越多越好 )
21+ - [ 如何终止正在运行的工作线程?] ( #如何终止正在运行的工作线程 )
22+ - [ iOS下所有的本地持久化方案?] ( #ios下所有的本地持久化方案 )
2323
2424
2525## 谈下iOS开发中知道的哪些锁?
3131<details >
3232<summary > 参考内容 </summary >
3333
34- - 我们在使用多线程的时候多个线程可能会访问同一块资源,这样就很容易引发数据错乱和数据安全等问题,这时候就需要我们保证每次只有一个线程访问这一块资源,锁 应运而生
34+ > 我们在使用多线程的时候多个线程可能会访问同一块资源,这样就很容易引发数据错乱和数据安全等问题,这时候就需要我们保证每次只有一个线程访问这一块资源,锁 应运而生
3535
3636- ` @synchronized ` 性能最差,SD和AFN等框架内部有使用这个.
3737
3838- NSRecursiveLock 和 NSLock :建议使用前者,避免循环调用出现** 死锁**
3939
40- - OSSpinLock 自旋锁 ,存在的问题是, 优先级反转问题,破坏了spinlock
40+ - OSSpinLock 自旋锁,存在的问题是: 优先级反转问题,破坏了spinlock
4141
4242- dispatch_semaphore 信号量 : 保持线程同步为线程加锁
4343
@@ -78,6 +78,8 @@ dispatch_semaphore_signal(signal):可以理解为 unlock,会使得 signal 值
7878<details>
7979<summary> 参考内容 </summary>
8080
81+ ### 回答思路
82+
8183- 循环通过pthread_create创建线程,创建s_tf thread对象做为线程句,加入线程数组,s_tftask_content->methord初始化为空函数
8284
8385- 创建任务执行函数,执行完通过task初始化函数后,在执行函数中通过pthread_cond_wait信号将当前创建的线程挂起
@@ -86,6 +88,33 @@ dispatch_semaphore_signal(signal):可以理解为 unlock,会使得 signal 值
8688
8789</details>
8890
91+
92+ ### 参考样例实现代码(基于dispatch_semaphore)
93+
94+ <details>
95+ <summary> 参考内容 </summary>
96+
97+ ```
98+ dispatch_queue_t workConcurrentQueue = dispatch_queue_create("example.code", DISPATCH_QUEUE_CONCURRENT);
99+ dispatch_queue_t serialQueue = dispatch_queue_create("example.code.task",DISPATCH_QUEUE_SERIAL);
100+ dispatch_semaphore_t semaphore = dispatch_semaphore_create(3);
101+ for (NSInteger i = 0; i < 10; i++) {
102+ dispatch_async(serialQueue, ^{
103+ dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
104+ dispatch_async(workConcurrentQueue, ^{
105+ NSLog(@"thread-info:%@开始执行任务%d",[ NSThread currentThread] ,(int)i);
106+ sleep(1);
107+ NSLog(@"thread-info:%@结束执行任务%d",[ NSThread currentThread] ,(int)i);
108+ dispatch_semaphore_signal(semaphore);});
109+ });
110+ }
111+ NSLog(@"主线程...!");
112+
113+ ```
114+
115+ </details>
116+
117+
89118## 如何用HTTP实现长连接?
90119<details>
91120<summary> 参考内容 </summary>
@@ -117,6 +146,7 @@ dispatch_semaphore_signal(signal):可以理解为 unlock,会使得 signal 值
117146 - 数组的初始化,赋值,取值安全
118147 - 数组的添加数据元素并非线程安全
119148- BOOL 类型 修饰符不受到atomic或者noatomic影响
149+
120150</details>
121151
122152
@@ -235,16 +265,15 @@ dispatch_semaphore_signal(signal):可以理解为 unlock,会使得 signal 值
235265</details >
236266
237267
268+ ### 觉得整理的蛮不错,可以赞赏一下旺仔(收集整理不易,且赞且珍惜)
269+
270+ </p >
271+ <img src =" ../images/wechat.JPG " width =" 300 " height =" 300 " ><img src =" https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/18ff90e4c8344f86aa69c34065bb379a~tplv-k3u1fbpfcp-zoom-1.image " width =" 300 " height =" 300 " >
272+ </p >
273+
238274## 链接
239275
240276- [ 面试题系列目录] ( ../README.md )
241277- ** 下一份** : [ interview-iOS-2] ( 02interview-iOS-2.md )
242278
243- ## 赞赏一下旺仔(收集整理不易,且赞且珍惜)
244-
245- </p >
246- <img src =" ../images/wechat.JPG " width =" 300 " height =" 300 " >
247- <img src =" https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/18ff90e4c8344f86aa69c34065bb379a~tplv-k3u1fbpfcp-zoom-1.image " width =" 300 " height =" 300 " >
248- </p >
249-
250279
0 commit comments