Cocoa:函式庫,像是 MFC、.NET、Swing
- 減號 ( 或加號 )
C#
private void hello(bool ishello)
{
//OOXX
}
Objective-C
-(void) hello:(BOOL)ishello
{
//OOXX
}
在 Objective-C 中沒有 public 和 private 的概念,可以認為全是 public。加號的意思在於其他函數可以調用這個類中的這個函數,而不用創建這個類的實例。
中括號可以認為如何調用你剛才寫的方法,通常在 Objective-C裡叫做「消息」。
C#
this.hello(true);Objective-C
[self hello:YES];
Jobs被Apple公司的CEO史考利趕出Apple後,建立的公司叫 NextStep,後來 Apple 買下 NextStep,就有了後來的 Mac OS X。
NextStep 除了變身為 Mac OS X 也變成現在 iPod、iPhone、iPad 上的 iOS
這些開發NextStep的人們比較自戀地把函數庫裡面所有的類都用NextStep的縮寫打頭命名,也就是NS****了。比較常見的比如:
NSLog NSString NSInteger NSURL NSImage
NSLog (@"%d",myInt);NSLog 主要是在 console 裡追蹤使用。
還有一些其他開頭的類別
CF:Core Foundation
CA:Core Admination
CG:Core Graphics
UI :User Interface
等...
- #import
可以把他認為是 #include。最好使用 #import。
在 Objective-C中 #import 被當成 #include 指令的改良版本來使用。除此之外,#import確定一個文件只能被導入一次,這使你在遞歸包含中不會出現問題。一般來說,在導入Objective-C頭文件的時候使用#import,包含C頭文件時使用#include。 - @interface
C#
public class Kids : System { private string kidName="mykid"; private string kidAge="15"; private bool isCaughtKid() { return true; } }Objective-C 1. 先寫 kids.h 文件定義這個類@interface Kids: NSObject { NSString *kidName; NSString *kidAge; } -(BOOL) isCaughtKid:; @end2. 再寫 一個 kids.m 文件實現#import 「kids.h」 @implementation Kids -(void) init { kidName=@」mykid」; kidAge=@」15」; } -(BOOL) isCaughtKid:{ return YES; } @end - 多個參數的寫法
( 方法的數據類型 ) 函數名:( 參數 1 型態 ) 參數 1 數值的名字 參數 2 名稱:( 參數 2 型態 ) 參數 2 值的名稱 ...
Objective 方法的定義:-(void) setKids: (NSString *)myOldestKidName secondKid: (NSString *) mySecondOldestKidName thirdKid: (NSString *) myThirdOldestKidName;
實作函數-(void) setKids: (NSString *)myOldestKidName secondKid: (NSString *) mySecondOldestKidName thirdKid: (NSString *) myThirdOldestKidName{ 大兒子 = myOldestKidName; 二兒子 = mySecondOldestKidName; 三兒子 = myThirdOldestKidName; }調用的時候Kids *myKids = [[Kids alloc] init]; [myKids setKids: @」張大力」 secondKid: @」張二力」thirdKid: @」張小力」];
C#public void setKids( string myOldestKidName, stringmySecondOldestKidName, string myThirdOldestKidName) { ... }C# 調用Kids myKids = new Kids(); myKids.setKids (「張大力」, 「張二力」, 「張小力」);
[[[MyClass alloc] init:[foo bar]] autorelease];
轉換成 C# 或 JavaMyClass.alloc().init(foo.bar()).autorelease();
- id
Objective-C 有種叫做 id 的型別,它的運作有時候像是 void*,不過它卻嚴格規定只能用在物件。Objective-C 與 Java 跟 C++ 不一樣,你在呼叫一個物件的 method 時,並不需要知道這個物件的型別。當然這個 method 一定要存在,這稱為 Objective-C 的訊息傳遞。 - 同一個數組可以保存不同的對象
比如一個數組 NSArray,這種數組可以保存各種不同的對象,例如:
myArray
0:( float ) 234.33f
1:@"我是個好人"
2:(NSImage*) 圖片網址
3:@"我真是個好人"
以上 Array 裡面包含浮點數、字串、圖片等型態。 - BOOL,YES,NO
YES 表示 C# 或 Java 裡的 true,NO 表示 false。
實際上 YES 是 1,NO 是 0 ,BOOL 本身就是個 char - IBOutlet、IBAction
如果你希望在Interface Builder中能看到這個控件對象,那麼在定義的時候前面加上IBOutlet,在IB裡就能看到這個對象的outlet。
如果你希望在Interface Builder裡控制某個對象執行某些動作,就在方法前面加上(IBAction)。 - nilObjective 的 null
- 方法的呼叫
C#回傳值 物件.方法(參數1, 參數2 ); retVal = Object.method( para1, para2 );
Objective-C回傳值 [物件 方法 :參數1 :參數2 ...]; retVal = [Object method :para1 :para2];
Objective-C 內的參數亦可以遞迴呼叫其它方法,將其回傳值當作參數丟進方法內。 C#retVal = Object.method( Obj2.method2(), para2 );
Objective-CretVal = [Object method :[Obj2 method2] :para2];
參考資料:
http://maciku.blogspot.tw/2009/12/iphone-objective-c.html
http://7club.ithome.com.tw/article/10028617/1
http://blog.roodo.com/flowyu/archives/1457515.html
http://www.cncfan.com/html/?106_7980.html
沒有留言:
張貼留言