- 減號(或加號):代表函數、方法的開始
private void hello (boolean b_start){
OOXX;
}
Object C的寫法是
-(void)hello:(boolean)b_start{
OOXX;
}
不過在Object C 是沒有private, public的區分,可都視為public
而加號則是表示其它的函數可以直接調用這個類中的函數,而不用創建這個類的實例
- 中括號[]
例如C#是可以這麼寫
this.hello(true);
Object C的寫法是
[self hello:YES];
- NS****
而這套Function library 的開發團體比較自戀,所用的function name都是以Next Step的第一個字母命名NS****
比較常見的就是
NSLog
NSString
NSInteger
NSURL
NSImage
問題:什麼是#import、@interface
- #import
- @interface
例如在C#寫一個抓孩子類的定義
public class Kids : system
{
private string str_kidName = "My Kids";
private string str_kidAge = "15";
private bool bl_isCaughtkid ()
{
return true;
}
}
用Object C表示:
先寫一個Kid.h定義這個類
@interface Kids:NSObject
{
NSString *str_kidName;
NSString *str_kidAge;
}
-(BOOL)bl_isCaughtkid:;
@end
再寫一個Kid.m實現這個類
#import "Kid.h"
@implement Kids
-(void) init:{
str_kidName =@ "My Kids";
str_kidAge = @"15";
}
-(BOOL)bl_isCaughtkid:{
return YES;
}
@end
問題:一個方法怎麼傳遞多個參數?
一個方法可以包含多個參數,只是後面的參數都要有參數名稱。
多個參數的寫法
(方法的數據類型)函數名稱:(參數1數據類型)參數1數值名稱 參數2的名字:(參數2數據類型) 參數2數值名稱
舉例、一個方法的定義
-(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, stringmyThirdOldestKidName)
{
…
}
調用的時候大概的寫法可能是:
Kids myKids = new Kids();
myKids.setKids (「張大力」, 「張二力」, 「張小力」);
明白了吧?其實不怎麼難看懂。
基本上,如果你能了解下面這段代碼的轉換關系,你Objective-C的語法也就懂了八成了:
[[[MyClass alloc] init:[foo bar]] autorelease];
轉換成C#或者Java的語法也就是:
MyClass.alloc().init(foo.bar()).autorelease();