Object C學習記錄

來源:互聯網
上載者:User

@Object-C中,public,protected,private用來控制繼承類的存取權限,對於類成員的訪問,並不能起到作用。而在C++,Java中,此三個描述符亦可以用來控製成員變數的存取權限。

@強型別和弱類型,強型別變數使用類名稱,弱類型變數使用id代替,弱類型提供了在運行時更大的靈活性和動態性的功能,需要在機制上家以保證,這也是和靜態類型的語言有差異的地方吧。

@在Object-C中,對象的引用叫做指標,需要記住在聲明強型別對象的變數是加上*就可以了,弱類型id本身就是一個指標。可以聲明兩種類型的方法,屍體方法和類方法,實體方法是特定類的執行個體中可以執行的方法,類方法無需建立執行個體,當然也可在建立執行個體後使用。

@很奇葩的一種方法出現了,那天看的我好鬱悶,現在懂了。一般來說,函數的聲明包括傳回型別,函數名和輸入參數類型和名稱組成,Object-C類似,只是在Object-C中,函數名和參數類型及名稱可能是分開寫的,例如函數insertObject:atIndex:

- (void) insertObject:(id)onObject atIndex:(NSUInteger)index

其中函數類型標識符(類方法或執行個體方法)為-,即執行個體方法;傳回型別是void,函數名又稱方法簽名關鍵字,這裡包括了insertObject和atIndex兩部分,參數類型是id和NSUInteger,參數名稱是anObject和index兩部分。結構類似,只是表現形式不同,需要完成思維的轉換。

上面的方法實際名稱是:insertObject:atIndex:,即所有簽名關鍵字的連結,冒號說明了當前的參數。

方法調用時,通過向對象通訊,通訊內容是方法簽名和方法要求的參數資訊。方法調用格式如下:

[myArray insertObject:anObject atIndex:0],中括弧中,最左邊是接受資訊的對象,資訊包括參數在右邊,上面即表示發送資訊insertobject:atindex:到變數名為myArray的對象中去。

為了避免多個局部變數來儲存臨時結果,Object-C允許你嵌套資訊,來自每個嵌套資訊中的傳回值可以作為參數,目標或另一個資訊,可以用資訊代替前面例子中任意使用過的變數。從而,假如說有一個叫myAppObject的對象,他有訪問數組對象和將對象嵌入數組的方法,可以將上述的例子寫成下面這樣:

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

Object-C也提供句點來調用存取器方法,存取器擷取和設定某一個對象的狀態,典型的格式為-(type)propertyname和-(void)setPropertyName:(type)。使用句點文法,你可以將上述的例子重寫成:

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

亦可以使用句點文法賦值,所謂存取器方法,自然包括兩部分,儲存和取出,如下所示:

myAppObject.theArray=aNewArray;

有沒有發現越來越自然語言,賦值也可以寫成:

[myAppObject setTheArray:aNewArray]

發訊息時可以發給類執行個體或者類本身,相對應地也就需要指定方法是執行個體方法或者類方法。

類方法包括類執行個體建立,訪問類共用資訊,同執行個體方法聲明唯一的不同就是-+號的區別。

使用類方法作為類的Factory 方法,如下方法array是NSArray的類方法--繼承自NSMutableArray-用於分配和初始化該類的新執行個體並將它返回到代碼中區。

MSMutableArray *myArray=null;

//建立新數組並賦值給變數myArray

myArray= [NSMutableArray array];

.h檔案是介面檔案,包括interface和end,.m檔案是實現檔案,包括implementation和end。編譯器通過這些資訊,來實現定位相對應類的封閉方法。方法的聲明要匹配借口檔案中的說明,無需包含代碼塊的內容。

@property (readonly) UIView* rootView;

@synthesize flag,nameObject,rootView

字串:

NSString提供對象封裝字串,可以具有所需要的所有缺點,為任意長度的字串建立記憶體管理,支援多個格式化工具集,Object-C快捷建立NSString需要在普通的C字串前加@符號。

NSString *myString = @"My String\n";
NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"];
NSString *fromCString = [NSString stringWithCString:"A C string" encoding:NSASCIIStringEncoding];
協議
這裡的協議如同一個借口,可以被任意類實現,其通過頂一個一個借口讓其他對象可靠地實現,實現方法,即可說明符合協議了。
協議類似借口,但是協議沒有父類,並且不能定義屍體變數。
Application通過委託擷取了View,委託的實現來自於協議的要求,聲明中則包含了View。

聯繫我們

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