登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Code@Pig Home

喜欢背着一袋Code傻笑的Pig .. 忧美.欢笑.记忆.忘却 .之. 角落

 
 
 

日志

 
 

[mac] learning objective-c (1) -- class  

2010-11-07 20:48:43|  分类: lang_objc |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
Objective-C 和 C++ 很像,都是在 C 的基础上对其进行扩展。Objective-C 扩展后,更象一门动态语言。
我们来看看 Objective-C 的中 class 如何来表达。

obj-c 中的 #import 相当于自动为你写了 #ifndef / #define / #endif,当然,#include 也依旧可以用。

---------------- HelloWorld.h ---------------

#import <Foundation/Foundation.h>


@interface HelloWorld : NSObject {

int value;              // 括号之间放 data members

}


- (void) setValue: (int) v;     // - 表示 instance member function

- (int) getValue;


+ (const char *) helloString;   // + 表示 class static function


@end

--------------- HelloWorld.m ----------------

#import "HelloWorld.h"


@implementation HelloWorld


- (void) setValue:(int)v

{

value = v;

}


- (int) getValue

{

return value;

}


+ (const char *) helloString

{

return "Hello Objective-C!";

}


@end

----------------- main.m -------------------

#import "HelloWorld.h"


int main (int argc, const char * argv[]) {

HelloWorld *p = [[HelloWorld alloc] init];

[p setValue:10];

printf("v = %d, %s\n", [p getValue], [HelloWorld helloString]);

[p release];

    return 0;

}

--------------------------------------------

和 java 一样,object instance 只能从 heap 上申请,不能放到 stack。

obj-c 2.0 之前没有 gc,通过继承自 NSObject 实现 reference count 的功能。
obj = [[Class alloc] init];
use obj ...
[obj retain];    // add ref
[obj release];   // release ref

[[Class alloc] init] 显式地将内存申请和初始化内存两步分开,可能写起来有点ugly,但让读代码的人清晰明了,偶稀饭。

[obj func] 这样的函数调用形式,除了写法上与 C++/Java 不同外,obj-c 中相当于给 obj 发送一个名为 func 的 message。就是说函数不是 compile time 静态绑定的,而是与动态语言类似。

obj-c 中 nil 代表 pointer points no object。C++ 中我们常写
if (obj) {
  obj->doSomeThing();
}
而 obj-c 中 [obj doSomeThing],如果 obj == nil,不会出错,程序继续执行。

ps. 经常说的 Xcode 其实就是 mac 下的 Visual Studio,很好用,语法加亮 copy 到 blog 还可以生效,cooool~
    而 cocoa 就是 Foundation + AppKit(UIKit) 的合称。

  评论这张
 
阅读(838)| 评论(4)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018