Objective-C入門(Learning Objective-C)

來源:互聯網
上載者:User

我本來想翻譯一下的,但是看到網上以及有一些翻譯的,所以就直接轉載了.

原貼地址:http://www.i-alive.com/post/45/

英文版地址:https://developer.apple.com/library/ios/#referencelibrary/GettingStarted/Learning_Objective-C_A_Primer/_index.html#//apple_ref/doc/uid/TP40007594

Objective-C是C語言的一個超集,也就是說,它支援基本的C語言的文法。
類的定義和實現是分別放在標頭檔和源檔案中的。標頭檔的副檔名是.h;源檔案是.m;還有一種.mm是用來放C++代碼的。

Classes(類)

Objective-C類的定義分為聲明和實現兩部分:
interface部分包含類的聲明,執行個體變數定義,以類相關的方法。interface通常都在.h檔案中;
代碼實現部分包含類方法的代碼,這部分放在.m檔案中。

給出了類聲明的文法。

類MyClass繼承了基類NSObject。
類的聲明以@interface開始,後面跟著類名及繼承的基類;聲明以@end結束。
類的執行個體變數(或者叫成員變數)放在大括弧中({ & });
類的方法在大括弧外面聲明。
每行語句是以分號(;)來結尾的。

objective-c同時支援強型別和弱類型,強型別就不用說了,弱類型的話,是用“id”來聲明,用這個聲明的變數,什麼都能裝,大概就是這個意思。

Methods and Messaging(方法與訊息)

Methods:
objective-c的類可以聲明兩種方法:類方法和執行個體方法。
執行個體方法就是只有聲明執行個體後才能調用,聲明的時候用“-”;
類方法就像靜態方法一樣,直接用類就能調用,聲明的時候用“+”。
為方法聲明文法:

 

Message:
叫這個message我總覺得怪怪的,怎麼翻譯都覺得彆扭。算了,不糾結了,直接說吧。
調用一個方法的方式,就是發對象訊息(messaging an object)。message就是方法簽名。所有發送給對象的message都是動態調用的,這也是objective-c實現多態的方法。

[myArray insertObject:anObject atIndex:0];

由上面的樣本可以看到,一次調用,一個message是用一堆中括弧([ & ])來包起來的。在中括弧內,接收message的對象在左邊( myArray ),message在右邊( 也就是insterObject:anObject atIndex:0 )。

message也可以嵌套,比如參數可以是一個message,比如,message執行的結果可以傳給參數,或把message作為接收方,就行下面這行代碼一樣,這樣代碼也會比較簡潔。

[[myAppObject theArray] insertObject:[myAppObject objectToInsert] atIndex:0];

Objective-C用“.”操作符來操作存取方法( accessor methods ),用來擷取或設定對象狀態。存取方法的形式一般來說就是 :
-(type) prropertyName                    //讀取
-(void) setPropertyName:(type)    //設定

下面是範例程式碼:

//在訊息中用“.”操作符調用存取方法[myAppObject.theArray insertObject:[myAppObject objectToInsert] atIndex:0];//賦值時的"."操作符調用存取方法myAppObject.theArray = aNewArray;

類方法的實現樣本:

@implementation MyClass - (id)initWithString:(NSString *)aName{    self = [super init];    if (self) {        name = [aName copy];    }    return self;} + (MyClass *)createMyClassWithString: (NSString *)aName{    return [[[self alloc] initWithString:aName] autorelease];}@end

note:在objective-C中 nil 相當於 null。比如:NSMutableArray *myArray = nill。

Declared Properties(屬性)

聲明屬性要比聲明存取方法簡單方便的多。
屬性的聲明是和方法的聲明放在一塊兒的,用“@property”來定義。
你一可以對屬性做一些設定,比如唯讀或是讀取時copy對象什麼的,如下:

@property BOOL flag;@property (copy) NSString *nameObject;  // Copy the object during assignment.@property (readonly) UIView *rootView;  // Declare only a getter method.

每一個可讀的屬性,會自動設定一個同名的方法,用來讀取;

每一個可寫的屬性,會自動設定一個setPropertyName形式的方法,以set開頭,後面跟開頭字母大寫的屬性名稱。

在類的實現部分,你可以用“@synthesize”來指示編譯器產生屬性相應的方法。
可以用兩種方式聲明:

@synthesize flag;@synthesize nameObject;@synthesize rootView;
@synthesize flag, nameObject, rootView;

一般來說,屬性減少了很多代碼量。因為用存取方法實現的話,做的事情也差不多,而其還有寫一堆實現代碼。用@property來聲明,再用@synthesize在編譯的時候產生擷取及設定方法,明顯要簡單一些。

strings(字串)

作為C的超集,它支援C風格的字串。但一般來說不會用C風格的字串。
字串會作為類NSStrings的對象來傳送。
用類NSStrings來封裝字串有很多好處,比如可以使用一些內建的方法來處理字串,比如按長度排序,支援unicode,以及printf風格的格式化等等。
因為字串經常被用到,所以,objective-c提供了一種簡寫方式來建立NSString對象。
如下所示(用@):

NSString *myString = @"My String\n";NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"]; // Create an Objective-C string from a C stringNSString *fromCString = [NSString stringWithCString:"A C string"                                   encoding:NSASCIIStringEncoding];

protocols(協議)

protocols按我的理解應該跟C#裡的介面差不多意思:

  • 可以被任何類實現;
  • 只定義介面,沒有實現,沒有執行個體變數,實現部分交給繼承的類;
  • 常常用來指定委派物件的介面;
  • 聲明方式:
@interface MyClass : NSObject  {}@end

通過下面的代碼理解一下協議,委託及其他對象直接的關係:

@protocol MyProtocol- (void)myProtocolMethod;@end

假設有個UIAplication類實現了某個應用的一些方法;如果想接收這個應用的一些通知,我們不用繼承這個UIAplication類來實現,該類通過調用方法,將通知發給委派物件。另一個實現了委託協議(UIAplicationDelegate protocol)方法的對象,會接收通知,並提供一個合適的回應資訊。
要實現一個介面,只要用“<>”抱住協議名稱,放在繼承類後面就可以了,類的聲明部分不需要對協議方法再次聲明。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.