百度空间 | 百度首页 
 
查看文章
 
iPhone 应用开发 - 八卦之[1]
2008/07/19 16:24
接着分析应用程序.
细看各个文件:main.m ,HelloWorldAppDelegate.m,HelloWorldAppDelegate.h还有NIB文件MainWindow.xib.

首先是main.m(.m文件类似于C的.c和C++的.cpp文件):

Object-C代码, 代码高亮@代码发芽网
01 #import <UIKit/UIKit.h>
02
03 int main(int argc, char *argv[]) {
04    
05     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
06     NSLog(@"hello!");
07     int retVal = UIApplicationMain(argc, argv, nil, nil);
08     [pool release];
09     return retVal;
10 }

(OT一下,给代码发芽网做个广告:python写的,非常帅的,非常方便的,web2.0的代码高亮网站,刚想把这段代码贴上来,才发现emacs的htmlize插件还没装,突然想起来这个在python-cn邮件列表中看到过的网站,还真是不错!挺方便的,赶紧注册一个吧!不注册也能用)

* #import 是更好的#include,不会多次加载同一个文件
* main函数颇像C系列的main函数(就是一样!)
* NS打头的是nextstep的缩写
* NSAutoreleasePool 这个东西目前只知道是用来完成GC的,具体是如何做到的不太清楚
* NSLog是我加的一行,用来输出变量,可以在"Console"窗口看到输出的内容(点那个画着"gdb"三个字母的图标);其他的变量值可以在"Show Debugger"里面看到(gdb左边那个按钮)
* @的用法,还没忘,是用于吧string转成NSString,必须这样输出字符串.
* UIApplicationMain
没什么好说的
* [pool release]翻译成C++就是: pool.release();


main.m比较好理解,还有个
UIApplicationMain一会儿再说.

另外,关于YES和NO,

   在Objective-C语言中,真和假分别以1和0代替。它们属于一个特殊的数值类型——布尔型数值
    (BOOL)。“真”可以用1或者YES代替;“假”可以用0或者“NO”代替另外,



Object-C代码: iPhone HelloWorld 之HelloWorldAppDelegate.h
01
#import <UIKit/UIKit.h>
02
03 @class HelloWorldViewController;
04
05 @interface HelloWorldAppDelegate : NSObject <UIApplicationDelegate> {
06     IBOutlet UIWindow *window;
07 }
08
09 @property (nonatomic, retain) UIWindow *window;
10
11 @end

* NSObject:NeXTStep Object 的缩写,现已改名为OpenStep,所以这个NS已经没什么意义了.
* 继承(inheritance) ,以class:parent的形式表示,就像上面的(inheritance)以 Class: Parent 表示,就像上面的HelloWorldAppDelegate : NSObject
* 成员方法的格式:
        scope (returnType) methodName: (parameter1Type) parameter1Name;
     scope 分为class和instance两种,instance methods以'-'开头;class methods以'+'开头,如果不明白什么是class methods 什么是instance methods 请自行google之.
* {}之间的只是定义 instance variables而不是像C++那样整个类都放在里面,接口的结束(interface的结束)是在@end处,@end标示一个类(class)或者一个接口(interface)的结束.
      本例中的instance variables 只有一个 IBOutlet UIWindow *window;
   
     没有instance method或者class method
* HelloWorldViewController 是声明的一个类.
* @property在Objective-C中指示了变量的声明.括号中的retain指示了赋值器需要保留input值;这一行的其他部分指示了属性的类型和名称.以前的@property是直接这样:@property(xxxx)现在改为@property(nonatomic, xxxx)因为很多属性变量不需要支持多线程,用nonatomic比较节省资源.


------------------------------------NOTICE
------------------------------------
另外,当然有个另外!哈哈,这个property据说是Objective-C 2.0中引入的,"通常就是Java中的JavaBean,只是定义一个类变量(Class Virable)然后编译器和Runtime会自动为这个变量引入setter和getter的方法。其中有一些变化,包括可以设定是否只读,是否Copy原值等等,比较方便。" 有了这个就可以部分使用Dot操作符了,减少一些中括号操作,有个例子:
"""
   比如定义个Property如下:

@property (nonatomic, retain) NSString * myStr;

接下来,你就可以在你的对象中使用dot操作符:

myObj.myStr = @"TOTO";

上面的表述还可以用以前的方括号来表示如下:
[myObj setMyStr:@"TOTO"];

在单个对象的情况下,还不是那么丑陋,在2层以上的对象嵌套使用以后就会非常的丑陋:

[[[myObj prop1] prop2] setProp3:@"abc"];

嘿嘿,真难看。不过这样的用法不太推荐罢了,如果有一个对象为NULL(Apple非要称之为Nil),就会抛出RuntimeException.

另外Apple还提供了一种在未定义Property的情况下,只要实现了相应的getter和setter方法,也可以使用Dot操作符的设定。
"""
    如果你了解Python,Python里面的property可能跟这个property更为相像,除了上面提到的有点,property还有一点好处:
   "Properties perform tasks similar to those of special methods __getattr__ ,_settattr__,and __delattr__,but in a
faster and simpler way"如果你不了解Python的Property也没关系,只要记着faster and simpler就ok了.
------------------------------------NOTICE END------------------------------------

最后:
Object-C代码: HelloWorldAppDelegate.m 01 #import "HelloWorldAppDelegate.h"
02
03 @implementation HelloWorldAppDelegate
04
05 @synthesize window;
06
07 - (void)applicationDidFinishLaunching:(UIApplication *)application {   
08    
09     // Override point for customization after app launch   
10     [window makeKeyAndVisible];
11 }
12
13
14 - (void)dealloc {
15     [window release];
16     [super dealloc];
17 }
18
19
20 @end

* @implementation
     Implementation 用于实现class中定义好的methods,以@Implementation ClassName开始,以@end结束,跟interface中声明时很相似.
* @synthesize
     @synthesize让编译器为我们自动生成赋值器和取值器,这样,我们只需为这个类实现dealloc方法.访问器只会在他们不存在的情况下才被生成,所以请放心的对一个属性使用@synthesize,然后在你需要的时候实现自定义的取值器和赋值器.编译器会填补任何方法的空白


至于MainWindow.xib.文件,还有nib文件属于资源文件,以后再研究.
ok,这段文字里面好象没有八卦,下次补上吧!

类别:Mac | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu