iPhone中Png图片格式的研究

有时候我们看到一个App,想看看他的一些界面是如何实现的,这个时候需要查看一下它的图片资源,不过iOS的png图片编译后一般的图片阅读器都是没法查看的,本文将告诉的原因和转换出原图的方法(得安装XCode)。

ipa 解压,将png相关文件夹拷贝出来,在命令行下使用/Developer/Platforms/iPhoneOS.platform/Developer /usr/bin/pngcrush -revert-iphone-optimizations xxx.png yyy.png

我们都知道一个编译好的iPhone app 其中的png图片一般普通的图片阅读器是无法直接读取的,这是因为XCode在编译的过程中,将图片进行了优化,实际上它已经不是一个png图片了。
这边有一些apple iPhone png自己格式的一些说明
http://iphonedevwiki.net/index.php/CgBI_file_format 阅读全文 >>

Objective-C 对 URL 进行 URLEncode 编码

在 iOS 程序访问 HTTP 资源时需要对 URL 进行 Encode,比如像拼出来的 http://unmi.cc?p1=%+&sd f&p2=中文,其中的中文、特殊符号&%和空格都必须进行转译才能正确访问。

在 Java、.net 和 JS 中都有相应的 encodeURL 方法可用,在 Objective-C 语言中,你可以试下

- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)enc;

来对完整的 URL(带请求参数的)进行编码,比如执行下面的代码:

阅读全文 >>

走近 Ruby 的世界(四)

Ruby 解释器给我们提供了四个常用的命令行工具,ruby、irb、ri 和  gem。动态脚本语言的解释器类似工具的使用方法基本一致的,逐个来看下它们的用法:

1. ruby:脚本解释器,直接执行脚本或脚本文件

% ruby -e 'puts "hello world!"'
% ruby hello.rb

ruby 显示输出可以用三种方法:print、puts 和 p,print 和 puts 都会把操作对象的 to_s 返回值输出,只是 puts 会在输出内容没有换行时加上一个换行,有则和 print 是一样的。例如 puts "Hello World!" 就是 print "Hello World!\n",puts "Hello World!\n" 也是  print "Hello World!\n"。p 会调用对象的 inspect 方法进行输出,最后加不加换行与 puts 的规则是一样的。

2.    irb:(Interactive RuBy) 是个 Ruby 的交互命令行,可用来测试一些 Ruby 的特性,不过有 TextMate 那样的工具基本不会去用它。你还能在 irb 的 shell 下再次输入 irb 启动一个子 shell。 阅读全文 >>

NSNotificationCenter 的使用详解

通常我们在 iOS 中发生什么事件时该做什么是由 Delegate 实现的,例如 View 加载完后会触发 viewDidLoad。  Apple 还为我们提供了另一种通知响应方式,那就是 NSNotification,系统中(UIKeyboardDidShowNotification 等) 以及某些第三方组件(例如 ASIHTTPRequest 的 kReachabilityChangedNotification 等)。

NSNotificationCenter 较之于 Delegate 可以实现更大的跨度的通信机制,可以为两个无引用关系的两个对象进行通信。NSNotificationCenter 的通信原理使用了观察者模式:

1. NSNotificationCenter 注册观察者对某个事件(以字符串命名)感兴趣,及该事件触发时该执行的 Selector 或 Block
2. NSNotificationCenter 在某个时机激发事件(以字符串命名)
3. 观察者在收到感兴趣的事件时,执行相应的 Selector 或 Block 阅读全文 >>

走近 Ruby 的世界(三)

Ruby 中有许多以 ? 和 !号结尾的方法,? 号方法返回布尔值用于判断的,如Array.empty?,可以想到三元操作符 a = b==1?1:2 。出现在方法名尾部的感叹号表明使用该方法是需要多加小心。许多Ruby的核心类都定义了成对的方法,它们具有同样的名称,只是结尾相差一个“!”,通常情况下,不带感叹号的方法返调用该方法的一个拷贝,带感叹号的方法则是一个可变方法,该方法会修改原来的对象,如 Array 类中的 sort 和 sort!。

Ruby 里对变量名有这么一个约定:全局变量加前缀 $,实例变量用前缀 @,类变量前缀用 @@。

Ruby 的类和模块,来实现一个 Ruby 的示例类,从中了解类的构造方法,块的实现、块内循环和调用以及符号的重载,看如下代码: 阅读全文 >>

走近 Ruby 的世界(二)

还是零碎的记录,也不知道该为每一篇赋上什么合适的标题,姑且用一、二、三、四 ...... 往下标吧。

一种编程语 言,Coding 时一定要讲求效率的,我向来不认为用记事本来写程序就可被认为是多么的高明。就像测试 Java 程序我仍然是选用 Eclipse,当然命令行技术是要求掌握的。写 Ruby 程序可以用 NetBeans 那样带智能提示的工具,但是 Mac OS 下,TextMate 的口碑很不多的,它有很好用的 Bundle,Cmd+R 就能看到运行结果,查帮助也很方便。

从代码的智能提示来看,TextMate 或许只能称之为半智能,但它的效率还是非常的高,且基于其余时候打开 TextMate 的频度,我选择 TextMate 作为 Ruby 的 IDE。

Ruby 的表达式和操作符,Ruby 的语法是面向表达式的,如在其他语言中的控制结构在 Ruby 中统统叫做表达式,只是它们的返回值为 nil。来看几个较有特色的 Ruby 运算符: 阅读全文 >>

走近 Ruby 的世界(一)

因工作需要,需用到 Ruby 来写 BDD(Behaviour Driven Development) 的脚本,这样的话还是希望自己对 Ruby 有一定程度的了解,不能总是依葫芦画瓢吧。

Ruby 是由松本行弘(Yukihiro Matsumoto, 简称:Matz) 发明的,确实应该佩服一下,不存在什么民族情节的,比起所谓的汉语编程要强上千百遍,再说,通常民族情节都为政治所利用的。蒙牛、百度,腾讯等等 ,民族品牌,狗屁,都是某些个岛国注册的。

Ruby is designed to make programmers happy. Ruby 吸收了 List、Smalltalk 和 Perl 的灵感,采用了类似于 C 和 Java 的语法。

Ruby 是完全面向对象的编程语言(completely object-oriented language),不像 Java 和 C 存在基本(原始)类型,在 Ruby 的世界里,什么都是对象,像数字,true、false 或  nil 都是对象,它们有自己的属性和方法,你可以对它们点一下点出东西来。如: 阅读全文 >>