随笔 - 75
文章 - 0
评论 - 190
阅读 -
29万
05 2013 档案
多线程之旅:避免死锁——简单的锁分级(锁排序)
摘要:死锁是很讨厌的(虽然活锁更讨厌),如何避免死锁呢?
在两个线程间的循环等待是比较容易识别的,但是在死锁的形成中如果包含多个线程,那么就是难以发现的(现实中不少这种情况)。
首先来看看死锁形成的几个必要条件
1、互斥
2、等待
3、不可抢占
4、循环等待
除了完全避免多线程编程之外,如果要避免死锁,那么必须要使得上面这4个条件中有任意一个不满足。
阅读全文
学习如何使用SOS查看我们想要的信息(初级篇)
摘要:SOS这个工具很强大,能帮助我们分析和查询到很多有用的信息。如果配合它的扩展,还能帮我们定位一些死锁问题。拿我上一篇谈谈.NET中常见的内存泄露问题——GC、委托事件和弱引用的代码做例子,我们可以分析一个对象到底有没有被根引用,内存地址是什么,占用了多少内存等。SOS可以在Windbg中加载使用,也可以在Visual Studio中加载使用,为了能更方便的演示,我就说说如何在Visual Studio中加载使用一、要启用SOS,首先要修改项目的属性,如下图二、打开的“即时窗口”中输入“!load sos.dll”来加载SOS.dll在“即时窗口”中输入“!help”可以获得调试命令列表(如下)
阅读全文
谈谈.NET中常见的内存泄露问题——GC、委托事件和弱引用
摘要:其实吧,内存泄露一直是个令人头疼的问题,在带有GC的语言中这个情况得到了很大的好转,但是仍然可能会有问题。一、什么是内存泄露(memory leak)?内存泄露不是指内存坏了,也不是值内存没插稳漏出来了,简单来说,内存泄露就是在你期待的时间内你程序所占用的内存没有按照你想象中的那样被释放。因此什么是你期待的时间呢?明白这点很重要。如果一个对象占用内存的时间和包含这个对象的程序一样长,但是你并不期望是这样。那么就可以认为是内存泄露了。用具体例子来说明如下:class Button { public void OnClick(object sender, EventArgs e) { .....
阅读全文
和我一起来学iOS(五)负责表现的CALayer
摘要:CALayer 在很多方面都与 UIView 非常相似。它拥有位置、大小、变形和内容。你可以用自定义 的代码(通常会用到 Core Graphics)来覆盖绘制方法以绘制定制内容。图层的层级关系与视图的非常 接近。你可能会问:为什么还要有分离的对象?
最重要的答案是 UIView 是一个很重量级的对象,它管理绘制与事件处理(尤其是触摸事件)。 CALayer 完全关乎绘制。事实上,UIView 依靠 CALayer 来管理绘制,这样两者就能协作得很好。
每个 UIView 都有一个 CALayer 用于绘制。而且每个 CALayer 都可以拥有子图层,就像每个 UIView 都可以拥有子视图一样
阅读全文
多线程之旅:解读async和await
摘要:早上无意中看到了async和await关键字,花了十几分钟看了一下msdn,大概明白了是什么一个东西,和大家分享一下。await关键字的中文是期待的意思。在我们编程中想表达“我待会期待这里会有一个值,但我不是现在就要,我先去做其他事情,你完成的时候告诉我”。其实异步模式非常符合现实中场景,现实生活中...
阅读全文
iOS的GCD精要
摘要:使用线程的方式,可以通过GCD。 并发的后台任务,可以通过创建并发列队来实现。全局列队就是一个并发列队。 并发列队,执行的时候是并发的,GCD实现的时候会开启多线程。 串行列队,任务可以异步的放入队列,执行的时候会按照FIFO的顺序执行。因为是串行的,同一个串行列队不会有并发带来的各种问题。如果是主
阅读全文
和我一起来学iOS(四)UIView及其子类(下)UITableView
摘要:上节讲了一下UIView,这节接着讲它的重要子类,UITableView和UITableViewCell
通常来说,一个UITableView需要通过UITableViewController来指定它的样式。 当一个UITableViewController初始化的时候会创建UITableView的实例然后赋给自身的View属性,同时这个UITableView的两个属性dataSource和delegate都会指向UITableViewController。
滚动表视图时引发性能问题的不是解析 nib 文件,而 是要渲染多个子视图。当 UITableViewCell 拥有多个子视图时,iOS 的渲染机制会拖慢速度。 因此,代码生成的 UI 并不是要将 addSubView:方法放到 initWithStyle:reuseIdentifier 方法那里,而是要重写 drawRect 方法并以直接绘制内容的方式代替使用子视图。减少子视图(尤其是半透明的或下方还混有其他视图的)可以提高性能。
阅读全文
和我一起来学iOS(三)UIView及其子类(上)
摘要:在开始前,我想大家应该先读一读 Mac OS X 背后的故事,是一篇非常不错的文章。了解曾经发生的过去,才能对现在为什么会是这样有更深刻的认识。
xib与nib的渊源
Project Builder 在 Mac OS X 10.3 时被重命名为现在大家所熟知的 Xcode。Xcode 3以前,Interface Builder 使用一种名为 nib 格式的二进制文件格式。不过由于 nib 不能用肉眼读,也不方便使用版本管理工具来管理,所以 Xcode 3 开始新加入一种名为 xib 的文本文件格式,最后再在项目编译阶段输出为 nib 格式。和产生静态界面布局代码的工具很不同,nib 是不被转译成相应 Objective-C 代码的。用户程序执行时,nib 文件被读入,解包,所以 nib 文件是在运行时动态加载的。
阅读全文