Archive for the ‘objective c’ Category
第一个 iPad 程序
总算把巨无霸 xcode 以及 ios 的 sdk 装了上去,安装程序巨傻,说要关掉 iTunes,我都关了但是还是不继续装下去,也没搞明白为啥。后来怒了,ps 看了一眼,居然有个叫 iTunesHelper 的进程,杀掉之后就开始正常的安装了下去(省略骂人字样若干)。
启动 Xcode,创建新的项目,选择 iOS 里面对应的程序,如 view 类型之后,xcode 纠缠生了一个基本的模板,可以运行,我们只需要点上面的开始按钮,xcode 就会启动编译器、连接器进行编译链接,末了还会启动模拟器。由于我们在界面上什么都没写,所以打开模拟器之后是这样的:
按一下 home 按钮,这个模拟器居然跟真的 iPad 一样会回到桌面。
可能细心的人已经看见这里 iOS 的版本号了,虽然我的 iPad 是 5.0.1 的 iOS,我却无法使用最新的 xcode 和 SDK,这是因为犯贱的 apple 认为那个只能在 Lion (Mac OS X 10.7)下运行,虽说 Xcode + iOS SDK 是免费的,但是 Lion 却不便宜。
Xcode 里面列出来了一些 source code,那些都是苹果设计 GUI 的理念的体现,我们这里只是简单的熟悉一下使用的 objective C 语言。因此从 hello world 开始好了。objective C 是 C 的扩展,扩展的启发来自 smalltalk,现在用的主要是 Apple 在 2007 年搞的 objective C 2.0。讽刺的很,apple 当初发布 iPhone 并没有给开发者 native API,而只是希望有人为 safari 开发一些基于 web 的应用。正如 chrome OS 到现在都一直没见到什么起色一样,当时的 iPhone 应用也是一潭死水,直到 apple 发布了基于 object C 的这个 SDK。为什么是 Object C?这大概是苹果的“历史包袱”,Jobs 出走阶段去了一个叫 NeXT 的公司,他们做了一个 NeXT 风格的界面,后来被苹果收购。其实这个玩意很早的时候还接触过其 GNU 版本,那就是集成在 window maker 里面的 GNUStep 界面:
这个 NeXT 系的都是使用 Objective C 写成的,在此之上 apple 现在使用的 Cocoa 界面也是 objective C 写的。和 C++ 的老祖 simula 不同,objective c 的祖先是 smalltalk,里面一些比较细节可以参考 wiki。objective C 是靠 message 实现成员方法调用,而且 message 是运行时自动 binding 上的,这跟 C++ 崇尚编译时 binding 的思路完全不同。
#import <Foundation/Foundation.h>
int
main (int argc, const char* argv[]) {
NSAutoreleasePool* pool
= [[NSAutoreleasePool alloc] init] ;
NSLog (@"Hello World!") ;
[pool drain] ;
return 0 ;
}
不要惊讶于以上程序与 C 代码非常之象,因为 objective C 是 C 的 superset,完全兼容 C 的语法。同时我们也不难理解其中中括号部分,那就是 message,这里的字符串前面加 at 是为了标明这不是一个 C-style 的字符串,而是一个 NSString。编译也很简单,
$ make hello LDFLAGS+="-framework Foundation" cc -framework Foundation hello.m -o hello $ ./hello 2011-11-21 08:17:33.331 hello[72422:903] Hello World!
这里的 framework 和动态链接库类似,只是是 objective C 写的。其实像 Qt 提供的 framework 估计也就是提供了类似的 binding?后面我们熟悉了更多关于界面设计以及 object C 的细节以后会详细的介绍更多的东西。
——————
And they said one to another, Go to, let us make brick, and burn them thoroughly. And they had brick for stone, and slime had they for mortar.


