iPhone客户端开发笔记(一)

1,复习基础语法。

上次开发iOS程序大概是10个月前,当时弄懂了view、nib、window、nav、interface、category、protocol等知识,今天打开Xcode发现全忘了,只好再复习一遍。

在硬盘上找到一个iOS目录,打开后有几篇PDF,于是首先打开《Objective-C Beginner’s Guide》,是个台湾人写的,点里面的链接,直接到了这里:

http://www.otierney.net/objective-c.html.zh-tw.big5

用了一个小时看完了如下OBJ-C语法:

1,interface and implementation。

2,access level:protected private public。

3,memory management:AutoreleasePool and menual retainning and releasing。

4,-,+,id,nil,YES and NO等特殊标识符。

5,category、protocol、posing等概念。

好在这篇文章用代码来讲解,再加上有一点底子,所以理解起来飞快。

 

2,从默认项目代码看起。创建window based项目,

接下来需要了解Xcode和Fundation framework,这才是最麻烦的,

一开始就遇见这几行代码:

in AppDelegate.h:

@property (nonatomic, retain) IBOutlet UIWindow * window;

in AppDelegate.m:

@synthesize window = _window;

-(void)dealloc { [_window release]; …; }

找遍两个文件,没有找到_window声明和定义的地方,可能是语言级别的东西,再看XCode自带的《The Objective-C Programming Language》,终于找到了说明。

You can use the form property=ivar to indicate that a particular instance variable should be used for the property, for example:

@synthesize age=yearsOld;

……the property age is represented by the instance variable yearsOld.

通过调试程序发现,内存中已经没有window属性,只有_window属性,也就是window属性被实例对象取代了,彻底的。

比如在gdb控制台中:

p self.window

There is no member named window.

p self._windo

$2 = (UIWindow *) 0x4bb1ac0

在代码中,仍然可以使用self.window来引用该属性,但实际运行时会被替换成对self._window的引用。

 

这里面有对 _window 用法的详细说明。

http://stackoverflow.com/questions/5466496/why-rename-synthesized-properties-in-ios-with-leading-underscores

 

3,创建view based项目。

由于window based项目太空,所以再建个view based项目。

在界面上增加一个TextField,并添加初始化事件:initTextField。

a,在xib文件中拖入TextField。

b,在viewController.h中加入IBOutlet UITextField * textField.

c,在viewController.m中加入@synthesize textField.

d,在xib视图,从File's Owner按下control拖动到TextField,选择“textField”。

e,在viewController.h和.m中添加-(void)initTextField:(NSString *) content 方法。

f,在viewDidLoad中调用initTextField方法。

第一次忘了c,结果程序一运行就SIGABT。

基本上添加一个控件的过程就是这样子了。

 

下面分析一下这个默认项目,项目包含:

a,iHouseAppDelegate,它又包含:

IBOutlet UIWindow * window;

IBOutlet iHouseViewController * viewController.

这两项都在MainWindow界面中设置关联。

 

b,iHouseAppDelegate的application方法(从UIApplicationDelegate而来)为window和viewController建立关联:

self.window.rootViewController = self.viewController;

这就是各个组件、代码之间的联系。

 

4,新建一个view,并在第一个view中启动第二个。

通过看例子,恍然悟出一个道理:iOS不同于Win开发,打开一个对话框,然后在新对话框中再打开一个对话框,一层一层堆上去……

对iOS来说,只有一个屏幕,每个时刻只能显示一个全屏对话框(半全屏的效果很特殊,非经典用法),要从一个到另一个,并从另一个返回来,为什么不用导航控制器呢?

使用导航控制器的详细文档:

https://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/NavigationControllers.html#//apple_ref/doc/uid/TP40011313-CH2

一次试验成功,彻底消除心理阴影!

 

5,了解iOS4中app的生命周期。

看到这个我就放心了:http://www.codeproject.com/Articles/121681/Application-s-Life-Cycle-in-iOS4

 

6,学习TCP通信。

用CFStream:  https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Streams/Articles/NetworkStreams.html#//apple_ref/doc/uid/20002277-BCIDFCDI

 

7,学习九宫格界面制作。

想想也不需要,将分辨率评分为3*3的九格,放九个按钮即可。不过这方法还不如用UITableViewController,每行再放三个按钮对象。

Stackoverflow上有问为何没有GridView,有人推荐在github中搜索开放代码,总之有很多。

posted @ 2012-02-15 10:29  勤劳的天蓬  阅读(493)  评论(0编辑  收藏  举报