《C#妹妹和Objective-C阿姨對話錄》(03)NSString--再遇狗狗

來源:互聯網
上載者:User
***接上篇《C#妹妹和Objective-C阿姨對話錄》(02)這就是類--阿姨的狗狗***C#妹妹:哇,冤家路窄啊,這個不是Objective-C阿姨家的狗狗嗎?狗狗:日,到底誰跟誰是冤家。。
C#妹妹:不服氣呀~再給你弄一陀吃吃。。
#import <Foundation/Foundation.h>#import "Dog.h"int main (int argc, const char * argv[]){    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];    Dog *d=[Dog new];    [d Eat:@"便便" EatQty:1];    [d release];    [pool drain];    return 0;}

狗狗:
C#妹妹:操,升級啦,看姐姐我扒你的皮,毀你的原始碼。。
Objective-C阿姨:你這個小姑娘為啥總跟我狗狗過不去呀。
C#妹妹:它不吃屎也就罷了,還說什麼“你留著自己吃。。。”,肯定程式出問題了,我幫他調試一下。
Objective-C阿姨:就是怕你再害它,我昨天給他升級了。。。現在代碼是這個樣子。。

#import "Dog.h"@implementation Dog-(void) Sound{    NSLog(@"汪汪!");}BOOL isTrueFood(NSString  *food){    NSRange r=[@",包子,骨頭,肉,冰激淩," rangeOfString:[NSString stringWithFormat:@"%@%@%@",@",",food,@","]];    if(r.length>0)        return(YES);    else        return(NO);               }-(void) Eat:(NSString  *) food  EatQty:(int) count{    if(isTrueFood(food)==YES)    {        NSLog(@"吃%d斤%@",count,food);    }    else    {        NSLog(@"你留著自己吃吧。。。");    }}@end//Dog
C#妹妹:哇,我們天朝特色的敏感詞語過濾技術你都用上了。。。真是同一個世界,同一個噩夢啊。。。
Objective-C阿姨:,你能不能少貧點。。。。
C#妹妹:貌似其他都能看懂,除了這一句不太明白
    NSRange r=[@",包子,骨頭,肉,冰激淩," rangeOfString:[NSString stringWithFormat:@"%@%@%@",@",",food,@","]];
Objective-C阿姨:這個語句裡邊就是用了兩個NSString的方法。一個是執行個體方法rangeOfString,一個是類方法stringWithFormat。NSString是Cocoa中用於字串處理的類,比C原始的字串數組方便了很多,就像.NET的String一樣,內建了很多方法。 rangeOfString:功能類似與.NET中的String.IndexOf,判斷一個字串在另一個字串中的位置,但是返回的類型是NSRange,而不是數字NSRange的定義估計你一看就知道怎麼回事了
typedef struct _NSRange {    NSUInteger location;//起始位置    NSUInteger length;//長度} NSRange;
其實NSRange.location就相當於.NET中String.IndexOf的傳回值。
C#妹妹:但是.NET中如果IndexOf檢索不到相應的內容,返回負數,而這個location是NSUInteger類型,看起來這個類型是一種不帶正負號的整數啊,如何表示檢索不到內容呢?Objective-C阿姨:有兩種方法可以解決這個問題。一種是判斷length的長度,如果長度為0,表示沒有找到相應的內容,另外一種判斷location是否等於NSNotFound。其實NSNotFound就是NSUInteger的最大值LONG_MAX
C#妹妹:挺經典的,.NET裡用負數表示檢索不到內容,Objective-C裡邊用最大值表示。
Objective-C阿姨:是的,rangeOfString的用法類似這樣
    NSString *word=@"tive";    NSString *str=@"這是Objective-C家的狗狗!";    NSLog(@"在字串‘%@’中搜尋‘%@’",str,word);    NSRange r=[str rangeOfString:word];//在str中搜尋word 返回NSRange 裡邊包含{location和length}    if(r.location==NSNotFound)//這裡判斷if(r.length<=0)也是一樣的        NSLog(@"這句話裡沒有找到%@",word);    else        NSLog(@"這句話中從第%lu個字元開始後邊%lu個字元是%@",r.location+1,r.length,word);
rangeOfString還可以有個參數 判斷是否區分大小寫什麼的。比如可以這樣用
    NSRange r=[str rangeOfString:word options:NSCaseInsensitiveSearch];//NSCaseInsensitiveSearch表示不區分大小寫
如果看著還有點暈,再回顧一次Objective-C給對象發送訊息的方式吧另外一個用到的函數 stringWithFormat:功能類似與.NET中的string.Format,也同樣都是類方法,都是用來產生字串的。用法你看看下面的例子

    NSString *str2=[NSString stringWithFormat:@"%@愛吃%@",@"狗狗",@"包子"];    NSLog(@"%@",str2);//這句話輸出 狗狗愛吃包子

弄明白這兩個方法,現在在看下面的語句應該就明白了吧。

    NSRange r=[@",包子,骨頭,肉,冰激淩," rangeOfString:[NSString stringWithFormat:@"%@%@%@",@",",food,@","]];

其實是兩個方法的嵌套先向NSString類發送訊息stringWithFormat產生食物名稱的字串,比如@“,包子,”然後再向字串@",包子,骨頭,肉,冰激淩,"其實也就是NSString的執行個體發送訊息rangeOfString檢索@“,包子,”是否包含在字串@",包子,骨頭,肉,冰激淩,"中。C#妹妹:好一段糾結的代碼。。。。
Objective-C阿姨:現在就比較一下NSString與.NET中的System.String吧。 關於字串長度。NSString用方法length方法。System.String有Length屬性。兩者都充分考慮到中文字元的問題,不論英文還是中文日本,每個字元長度加1。關於字串比較。
Objective-C不能用“==”號,比較字串內容的,“==”保留了原始的引用比較功能。C#已經把“==”處理成比較直觀的內容比較。Objective-C中比較字串是否相同正確的方法是isEqualToString。 與.NET的System.String相同,NSString同樣是不可變的NSString所謂的改變就是產生新的字串。與.NET的String.Text.StringBuilder一樣,Objective-C提供了NSMutableString,這個類表示的字串是可以修改的。但是與StringBuilder不同的是,他繼承自NSString,意味著基類的方法,他都可以用。

各位同學,本人學習Objective-C時間很短,學習Objective-C其實不是為了Mac、iPhone開發,並沒有實用,
其實是一個C#使用者學習Objective-C的學習筆記,學習的確切目的是協助我理解C#,畢竟沒有比較是不可能知道所謂C#的特點的
請大家批判的眼光看這個東西,如果發現和其他文章、書籍、評論、資料有衝突,請盡量以其他文章為準。並給我留言
也邀請所有高手積極拍磚,我正好用來蓋房子~~~
《C#妹妹和Objective-C阿姨對話錄》

(01)認識Objective-C--初次見面的問候 
(02)這就是類--阿姨的狗狗 
(03)NSString--再遇狗狗
(04)記憶體回收基礎--拆遷隊那點事

        待續⋯⋯

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.