一个解决IB分割线0.5像素问题的好方法

iOS开发为了统一UI,经常会遇到自定制分割线的情况,而IB中给UIImageView设置高度必须是整数,要想设置为0.5的话,可以通过修改xml文件来解决,我想大部分开发者直接就选择手动修改了,下面推荐一种高大上的方法.

搬家,新开始

之前的博客采用wordpress架设在百度的云服务BAE上,wordpress的发展慢慢靠向社区化,功能越来越多,也越来越让我烦。终于下定决定转到Octopress. wordpress转到Octopress没有非常完美的解决方案,我索性把以前所有文章手动makedown一遍,一些结合现在的知识做了修改,一些干脆放弃了。记得有一次面试官问了我自己博客的内容,因为时间太长实在没有回答起来。前途风景美丽,回过头也是种境界。

iOS Graphics的实现方式简单探讨

最近在学习Open GL ES,作者总喜欢里面的一些特性和quartz进行对比,于是我开始怀疑对一些知识理解的正确性。

首先ios绘图依靠Quartz, Core Animation, UIKit和open GL ,以前一直认为Quartz和Core Animation的底层都是依靠Open GL来进行渲染,看来我大错特错了。我想很多人对这些框架的底层实现方式不是很了解或者概念比较模糊,查阅了大量资料说法也不一,通过和小伙伴@answer-huang 和 @xdream86 的探讨,得出一个相对明细的结论,下面慢慢道来。

MagicalMaping—iOS对象映射

iOS网络请求到的json数据需要手动setter/getter序列化到具体的model对象,但这种写法就觉得不太优美,有时候model对象重用的时候还要重复的写setter。询问小伙伴,推荐一个名为jastor的对象序列化库,这个库可以序列化普通对象,但是对NSDate和CoreData的支持不完美或者说根本不支持。另外Restkit一大亮点也是支持对象自动映射,可同样不支持CoreData对象,况且Restkit框架还不够成熟。
参考Restkit对象映射的设计风格以及jastor对runtime的处理方式,我自己封装了一个映射库:magicalMapping. 支持coredata和NSDate的序列化。

calling u back

cocoa框架基于C语言除了良好的运行性能外还有个重要的优点就是强大丰富的C库支持。ios开发中C库和oc的互相调用对于开发者来说也是不小的挑战,国外网站看到一篇文章,翻译给大家,个人进行了精简:

我有时看到这样的问题:“我怎么把一个oc方法转化为方法指针,是在编译的时候转化还是本来就是cocoa框架的一种形式”。一个程序员错误的这样问了,就会让这个问题变得狭隘。其实这个问题应该这么问:“ How do I use an Objective-C method as a callback for a C library?” 意思就是怎么用c库回调oc的消息(方法)。把oc方法转化为c方法指针可能是解决这个问题的一种方法,真的这样吗? 不是,为什么?Inside the Bracket 这片文章告诉我们OC的方法其实也是C函数,只不过是在调用实参之前就封装了两个参数,self和selector. 这正是我们不能直接把oc方法作为c库回调的原因。 比例你用一个C库进行文本处理,它有一个回调方法并且给定了string和一个bool变量,你需要写个函数来转化字符串,简单写法:

UITableView性能优化

iOS开发时经常用到TableView… 然而在使用第三方应用时,却经常遇到性能上的问题,普遍表现在滚动时比较卡,特别是table cell中包含图片的情况时。
s
下面介绍一下具体怎么优化..

1.使用不透明的视图

不透明的视图可以极大地提高渲染的速度。因此如非必要,可以将table cell及其子视图的opaque属性设为YES(默认值)。
其中的特例包括背景色,它的alpha值应该为1(例如不要使用clearColor);图像的alpha值也应该为1,或者在画图时设为不透明。

iOS程序之事件处理流程(转)

因为交互的要求,跑在ipad上的程序必须以横版且仅以横版的模式运行。按说这应该是比较简单的事情:在plist或者工程设置中设一下程序起始方向和所支持的方向(Landscape),同时再在对应的ViewController中处理一下shouldAutorotateToInterfaceOrientation函数即可。但是却出了如下的问题:

在UIWindow中添加了两个ViewController,并显示后一个ViewController的视图,结果视图并没有被旋转成横版,仍旧按照竖版来显示。Google和StackOverFlow了一把,发现很多人都碰到过类似的问题,比如这个和这个。当然也有人给出了解决方案:给UIWindow设置一个rootViewController,尔后添加的所有ViewController都以rootViewController的subview形式添加。就连苹果官方的的Q&A也推荐这种做法: 《Why won’t my UIViewController rotate with the device?》至于原因,官方的Q&A讲的很简单:如果往一个UIWindow里面添加了两个以上的view,那么后面添加的view就会收不到旋转的事件,于是无法正常调整视图的方向 —– 只有第一个加入到UIWindow的view才会进行旋转。

iOS 使用私有api开发

###一.基本知识

iPhone中的API除了公开的API:Published API外(或者叫文档中记录的API:Documented API),还有两类API:私有API:Private API和未公开的API:UnPublished API(或者叫文档中未记录的API:Undocumented API)。其中私有API是指放在PrivateFrameworks框架中的API,未公开的API是指虽然放在Frameworks框架中,但是却没有在苹果的官方文档中有使用说明、代码介绍等记录的API。后两种API是有区别的,按苹果的说法,未公开的API是还不够成熟,可能还会变动的API,等完全成型了后会变成公开的API,但是目前不对其提供承诺,就是系统版本升级后可能会失效。而私有API是苹果明确不能使用的API。虽然两者有所区别,但是在具体使用方法上是类似的。