iOS多线程编程概要总结

来源:未知 责任编辑:智问网络 发表时间:2013-11-12 17:14 点击:

1.  创建线程的平均开销:  

                  内存堆栈:   主线程—— 1M ,  子线程——512K

                         时间:   基本可以忽略不计

 

2.  创建线程的多种方法:  www.2cto.com

  NSThread,   POSIX(基于C语言支持的API), NSObject的performSelector

 

3.  在工程没有使用ARC时,线程执行体代码中创建自动释放池

 

4. 为了线程安全,尽量避免在线程中使用共享的数据结构

 

5. runloop: 线程中的一个事件处理循环,用来不停的调度工作以及处理输入事件.

每一个线程都有自己的runloop, 主线程是默认开启的,子线程是需要手动开启。

        runloop监视每个输入源,处理事件,如果没有事件,runloop休眠,不消耗CPU资源

需要使用runloop的四种情况:


  a.使用端口或自定义输入源和其他线程通信
  b.子线程中使用了定时器
  c.cocoa中使用任何performSelector到了线程中运行方法
  d.使线程履行周期性任务
在子线程中用了NSURLConnection异步请求,那也需要用到runloop,不然线程退出了,相应的delegate方法就不能触发。


6. 线程同步:  a. 原子操作

b. 内存屏障和volatile变量

       内存屏障: 确保内存操作按照正确顺序工作的非阻塞同步工具

      volatile : 一般编译器会优化代码通过加载这些变量的值进入寄存器。 对于线程之间共享的变量,使用volatile强制编译器每次都从内存读取数据,确保数据的同步。

c. 锁: mutex, @synchronized()指令

d. 信号量

 

7.  线程安全设计技巧

     a. 完全避免数据同步(可能性比较小)

     b. 了解同步的限制

     c. 注意对代码正确性的威胁(保证数据同步安全,以及防止线程死锁)

     d. 尽量只使用一个锁进行数据同步保护,避免产生死锁

     e. 使用线程同步工具,

原子操作

锁:  使用POSIX, NSLock(lock,unlock, tryLock),  @synchronized()指令,包含隐式的异常处理例程来保护代码,发生异常会释放资源。

 

8.  线程安全总结:  

    a. 不可改变的对象,通常是线程安全的

    b. 主线程负责处理响应事件

        线程安全的类和函数:  NSArray, NSData, NSNumber.....

         非线程安全:  NSBundle, NSCoder, NSArchiver, NSMutableArray

只能用于主线程:  NSAppleSript 

 

 

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • Lexical or Preprocessor Issue 'xxx.h
    • ios学习笔记(二)xcode 4.3.2下实现基本交互
    • ios版本的helloworld
    • iphone(object-c) 内存管理(3) 有效的内存管理 前半部分
    • ios学习笔记(一)xcode 4.3.2下创建第一个ios项目
    • UITableView一些方法
    • IOS类似iphone通讯录TableView的完整demo【附源码】
    • [iPhone中级]iPhone团购信息客户端的开发 (二)
    • iphone(object-c)内存管理(1)
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1