设置 NSZombieEnabled 定位 EXC_BAD_ACCESS 错误

我们做 iOS 程序开发时经常用遇到 EXC_BAD_ACCESS 错误导致 Crash,出现这种错误时一般 Xcode 不会给我们太多的信息来定位错误来源,只是在应用 Delegate 上留下像 Thread 1: Program received signal: "EXC_BAD_ACCESS",让问题无从找起。

比如你对已释放的对象发送消息时就会出现,EXC_BAD_ACCESS,再如 release 的对象再 release,release 那些 autorelease 的对象等也会报这样的错。默认设置下 Xcode 不会给你定位具体是哪一行代码,不该去使用已释放的对象,或者 release 用错了。

比如 UIViewController 子类中这样的代码: 阅读全文 >>

让 Xcode 4 自动补全 []、 ""、 ''、 () 的插件

我现在所使用 Xcode 4 Beta 5 尚不支持对  []、 ""、 ''、 () 的自动补全,本插件是由 CocoaChina 版主 “yoyokko” 制作的 Xcode Plugin Plus for Xcode 4 可以帮您实现 Xcode 4 对 []、 ""、 ''、 () 符号的自动补全。

例如输入左中括号,自动补全右中括号,并且光标停在括号中间,在删除左中括号时,右中括号也自动删除。对双引号,单引号,圆括号也是一样的。大括号在 Xcode 中已能自动处理,输入一个左大括号,回车后就会补全右大括号。

本插件的安装方法如下:

1. 安装 SIMBL(SIMBL is the SIMple Bundle Loader),在  http://www.culater.net/software/SIMBL/SIMBL.php 下载 SIMBL-0.9.9.zip (Snow Leopard and Leopard),Lion 系统也可以用这个版本 阅读全文 >>

UIView.clipsToBounds 让子 View 只显示落在父 View 的 Frame 部分

默认情况下,我们向一个 View 中添加一个子 View 时,子 View 的越界部分也会显示出来,当然超过屏幕部分是显示不出来,因为无法在你手上显示内容了。看下面的图:

Unmi clipseToBounds     Unmi clipseToBounds

上图中,橙色的 View 是蓝色 View 的子 View。看左图,由它们的 Frame 设置,橙色的 View 部分超出的蓝色 View 的区域,默认情况下,蓝色 View 超出部分也会显示出来,除非在屏幕之外的部分。 阅读全文 >>

UIView 动画的两种编程方式

iOS  中的 UIView 动画编程其实还是很简单的,像 CSS3 一样,在给定的时间内完成状态连续性的变化呈现。比如背景色,Frame 大小,位移、翻转,特明度等。

以前我使用的编程方式都是用下面那样的三段式处理:

那么被 beginAnimations 和  commitAnimations 框起来的代码就会让你产生动画效果,这种方式像是数据库中的事物编程一样。 阅读全文 >>

UIView你知道多少[转]

曾经有人这么说过,在iphone里你看到的,摸到的,都是UIView,所以UIView在iphone开发里具有非常重要的作用。那么UIView我们到底知道多少呢。请看看下面的问题,
如果这些你都知道,那么本文章的内容就请绕道,如果你还不太清楚,我想看了下面的内容,你就明白了。
1。bounds和frame分别表示什么?
2。ContentMode里UIViewContentModeScaleToFill代表什么?
3。contentStretch 里的指定UIView里缩放区域是如何计算的?
4。UIVIew里的哪些属性变化可以用动画来呈现?
5。UIKit的坐标系和Core Graphics的坐标系的差别是什么?

视图和窗口展示了应用的用户界面,同时负责界面的交互。UIKit和其他系统框架提供了很多视图,你可以就地使用而几乎不需要修改。当你需要展示的内容与标准视图允许的有很大的差别时,你也可以定义自己的视图。 阅读全文 >>

几个 CGRect 函数例子

 CocoaChina 会员“”分享的几个 CGRect 函数例子,希望对您的苹果开发有所帮助

1.CGRectOffset使用从源CGRect偏移的原点来创建矩形

    float offset = 25.0;
    CGRect r1 = CGRectMake(100, 100, 100, 100);
    CGRect r2 = CGRectOffset(r1, offset, offset);

2.CGRectIntersectsRect允许我们确定两个矩形是否相交

    float offset = 25.0;
    CGRect r1 = CGRectMake(100, 100, 100, 100);
    CGRect r2 = CGRectMake(150, 150, 100, 100);
    if (CGRectIntersectsRect(r1, r2)) 阅读全文 >>

UIScrollView 的基本用法

iPhone/iPad 中 UIScrollView 还是经常要用到的,这里作了一个使用它最简单的例子,一个 ScrollView 中放了三个 UIView。这三个 UIView 分别设置了不同的背景色,它们在 ScrollView 中可以一页一页的滚动。

这段代码放在 UIViewController 的 viewDidLoad 方法中执行的,请注意每个 Frame 和 ScrollView 的关键属性,如 contentSize。ScrollView 中按页滚动时每次走动一个 ScrollView 的宽度(横向时) 或高度(纵向时)。看下面两张图:

   

第一张图是 阅读全文 >>

iOS开发 frame 与 bounds 的区别与关系

frame和bounds是UIView中的两个属性(property)。

frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)

bounds指的是:该view在本身坐标系统中 的位置和大小。(参照点是本身坐标系统)

阅读全文 >>

Objective-C 设计模式之单例

作为设计模式中最简单的一个,单例模式还是在很多系统中都会用到,总有那么一些实例,从始至终只需要它的一个实例,而且任何时候都要总方便的得到,像 Application 对象啦,环境对像啊。

要保持你设计的类别人只会初始出一个实例来,像 Java/C++/C# 中的做法一般希望能保证以下那些:

1. 构造方法藏起来,private 修饰,这样只能通过统一的工厂方法获得实例,因为 new 出来的总是新对象
2. 克隆方法出来的对象仍然是原来的对象
3. 反序列化出的对象也仍然是原来那个唯一的对象(这好像有点难)
4. 一般程序运行期间,该单实例不被释放
5. 一般要求工厂方法是原子性的,也是避免返回了不同的实例
6. 等等................. 是否还有些补充?

不一定每一点都真正考虑到,因为不是每个使用都都那么变态或不存在某些使用场景。

而我们这里的 Objective-C 有其语言的较大特殊性,是通过 alloc 来创建实例的,无法把构造方法 alloc 隐藏起来,但我们总是有办法的,可以做到:

1. 工厂方法返回唯一的实例
2. 多次调用 alloc 构造出的实例与 工厂方法得到的是同一个
3. 让你释放不掉这个实例,引用计数不让归零 阅读全文 >>

Objective-C 的方法原型及重载和覆盖

前一篇是:Objective-C 的方法原型及重载,本篇呢在上面的话题稍进一步延伸,方法原型中方法的覆盖关系就较为密切的,所以再说下方法覆盖的话题。

由前面,我们知道,在 Objective-C 中方法原型的得来是这样的,假如方法声明是:

-/+ (返回类型) 方法名: (参数1类型) 形参1  参数2描述: (参数2类型) 形参2 参数3描述: (参数3类型) 形参3 .......

那么它的方法原型则是:

方法名: 参数2描述:参数3描述: .......

关键的是它与参数类型无关。

重载的时候我们应避免方法原型相同,而子父类间进行方法覆盖的时候我们又应该要保持一样的方法原型。

我们可以再一次感性认识一下 Objective-C 的方法原型,从 Xcode 中,当 Command + 鼠标悬停 在调用方法上时: 阅读全文 >>