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 用法的详细说明。
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来说,只有一个屏幕,每个时刻只能显示一个全屏对话框(半全屏的效果很特殊,非经典用法),要从一个到另一个,并从另一个返回来,为什么不用导航控制器呢?
使用导航控制器的详细文档:
一次试验成功,彻底消除心理阴影!
5,了解iOS4中app的生命周期。
看到这个我就放心了:http://www.codeproject.com/Articles/121681/Application-s-Life-Cycle-in-iOS4
6,学习TCP通信。
7,学习九宫格界面制作。
想想也不需要,将分辨率评分为3*3的九格,放九个按钮即可。不过这方法还不如用UITableViewController,每行再放三个按钮对象。
Stackoverflow上有问为何没有GridView,有人推荐在github中搜索开放代码,总之有很多。