2014年6月18日 星期三

Object C 初體驗


  • 減號(或加號):代表函數、方法的開始
例如C#方法的寫法是
private void hello (boolean b_start){
    OOXX;
}

Object C的寫法是
-(void)hello:(boolean)b_start{
    OOXX;
}

不過在Object C 是沒有private, public的區分,可都視為public
而加號則是表示其它的函數可以直接調用這個類中的函數,而不用創建這個類的實例
  • 中括號[]
中括號可視為要如何調用我們剛才寫的方法,通常在Object C 稱為[消息]。
例如C#是可以這麼寫
this.hello(true);

Object C的寫法是
[self hello:YES];

  • NS****
當年賈伯斯被趕出蘋果時,所創立的公司Next Step,裡面一些開發包是很讓科學家喜歡的,這套函數庫也就是現在MAC OS 所使用的。
而這套Function library 的開發團體比較自戀,所用的function name都是以Next Step的第一個字母命名NS****
比較常見的就是
NSLog
NSString
NSInteger
NSURL
NSImage

問題:什麼是#import、@interface

  • #import
這可以視為#include是一樣的。但最好是用#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 allocinit:[foo bar]] autorelease];
轉換成C#或者Java的語法也就是:
MyClass.alloc().init(foo.bar()).autorelease();

沒有留言:

張貼留言