黑馬程式員——Objective-c特性

來源:互聯網
上載者:User

標籤:

 

1. 繼承 

Objective-c不支援多繼承。 Super 關鍵字:調用該類的父類; 超類:父類的另一種說法。           

2.自訂NSLog()輸出: 
在類中添加description方法就可以自訂NSLog()如何輸出對象。

 #import <Foundation/Foundation.h>

@implementation Tire -(NSString *) description 


   Return (@”I am a tire.”); 

int Main() 


    NSLog(@”%@”,tire[0]); 

return 0;


       
3.Foundation kit: 
Cocoa是由兩部分架構組成的:foundation kit [包括一些基礎類]和 application kit.【包括使用者介面對象和進階類】  

建立字串: 

NSString *test; 
test=[NSString stringWithFormat:@"i‘m %d years old!",23]; 
若在聲明方法時在方法前面添加了加號,那就表示把這個方法定義為類方法【這個方法屬於類對象,而不是類的執行個體對象。】 
NSArray類:可以存放任意類型的對象. 它有兩個限制: 
1. 它只能儲存objective-c的對象,但不能儲存C中的基礎資料型別 (Elementary Data Type),如int , float, enum, struct等。 

2.不能儲存nil(對象的零值或NULL值);【因為在建立NSArray時,要在列表結尾添加nil代表列表結束。】  

建立NSArray: 

NSArray *array; 
array=[NSArray arrayWithObjects:@"one",@"two",nil];         

NSString, NSMutableString類; 
【NSString是不可變的,即一旦建立完成,就不能通過刪除字元或添加字元的方式來改變它; 而NSMutableString是可變的。 
這兩個類就像JAVA中的string與stringBuffer類的區別。】 NSArray, NSMutableArray類; NSEnumerator枚舉; 

【 

NSEnumerator *emun; 
Emun=[array objectEnumerator]; Id thingie; 
While(thingie=[enumerator nextObject]){} 】 
NSDictionary:字典(關鍵字及其定義的集合。)【也成為散列表,關聯陣列】,NSMutableDictionary類; 
NSNumber:用來封裝基礎資料型別 (Elementary Data Type),如int ,char, float, bool;【將一個基本類型的資料封裝成對象叫做裝箱。】 
NSValue:它可以封裝任何類,NSNumber是它的子類。 NSNull: 
 在cocoa中看到“CF”字樣時,就表示它是蘋果公司的Core Foundation 架構相關的內容。  NSAutoreleasePool:自動釋放記憶體池。   
         
4.記憶體管理 
每個對象都有一個與之關聯的引用計數(也叫保留計數) 
當使用alloc, new 方法或通過 copy訊息(產生接收對象的一個副本)建立一個對象時,對象的引用計數值被設為1; 
 給對象發retain訊息時,增加該值;  發送release訊息時,減少該值; 
當一個對象的引用計數值變為0時,objective-c會自動向對象發送一條dealloc訊息。銷毀該對象。 

你可以在自己的對象中重寫該方法, 
使用retainCount訊息,可以擷取引用計數器的值。 -(id) retain; -(void) release; 
-(unsigned) retainCount;     

自動釋放池:autorelease pool; 建立: 
NSAutoreleasePool *pool; 
pool=[[NSAutoreleasePool alloc] init]; 

銷毀: 
[pool release]; 
注意:xcode自動產生的程式碼,銷毀pool池時,使用的是[pool drain],drain方法只是清空釋放池,但不銷毀pool.所以在自己編寫代碼時還是使用release. 
而且,drain只適用於MAC OS 10.4以上的版本,而release適用於所有版本。 
只有在向某個對象發送autorelease訊息時,該對象才會添加到NSAutoreleasepool中,才會被自動釋放。 
如:[car autorelease]; 

記憶體管理黃金準則:  
只有通過alloc, new和 copy方法建立的對象,才需要程式員負責向該對象發送release或autorelease訊息。 
而通過其他方法獲得的對象,則預設為已經被設定為自動釋放,所以不需要程式員做任何操作了。 在objective-c 2.0中有記憶體回收機制, 如果要對某個項目使用記憶體回收: 
項目資訊查詢"garb",出現“objective-c Garbage Collection”,將其值設定為“required[-fobjc-gc-only]” 
啟用記憶體回收後,通常的記憶體管理命令全都變成了空操作指令,不執行任何操作。 開發iphone軟體,不能使用記憶體回收。   
          
5.對象初始化 
兩種建立新對象的方法: [類名 new] 、[[類名 alloc] init] 
這兩種方法是等價的,但cocoa的慣例是使用後者。 alloc在為對象分配空間的同時,將這塊記憶體初始化為0; 

nit方法:初始化執行個體變數,使對象處於可用狀態。[傳回型別為id,  返回的值描述了被初始化的對象] 

使用new建立新對象時,系統要完成兩個步驟: 
1. 為對象分配記憶體,即對象獲得一個用來存放其執行個體變數的記憶體塊; 

2.自動調用init方法,讓該對象處於可用狀態。     
      
6.objective-c 2.0的新特性【只適用於mac os x10.5及以上】 
@property :表示聲明了對象的屬性。【這樣就不用再寫屬性的訪問器了。】 (他有copy, retain, readwrite, readonly等屬性) 

@synthesize:表示“建立該屬性的訪問器” 點運算式     
      
7.類別(分類) 
分類(category)是一種為現有的類添加新方法的方式。

 分類的聲明: 
@interface NSString (NumberConvenience) //類名 (分類名)

 -(NSNumber) lengthAsNumber;          //擴充方法聲明

 @end 
使用時使用原來的類名,就可以調用他的所有類別中的方法。 

分類的局限性: 
1.不能向類中添加新的執行個體變數; 
2.在類別中的方法若與類中現有的方法重名,則類中的方法不可用,被類別中的新方法取代。

 分類的作用: 
1.將類的實現分散到多個檔案或架構中; 

2. 建立對私人方法的前向引用; 
【Cocoa中沒有真正的私人方法,則實現私人方法類似功能的方法為: 先在分類中聲明方法;然後到現有類的實現中實現該方法。 
這樣這個類中的其他方法可以使用該方法,而其他外部的類就不會知道該方法的存在了。】 

3.向對象添加非正式協議。 
【建立一個NSObject的類別稱為建立一個非正式協議。】 

委託delegate是一種對象,另一個類的對象會要求委派物件執行它的某些操作。 受委派物件在某個時間(某個事件觸發)時,會自動通知委派物件執行委託方法。  

選取器:@selector():選取器只是一個方法名稱,但它以objective-c運行時使用的特殊方式編碼,以快速執行查詢。圓括弧中的內容是方法名。 
所以Car類的setEngine:方法的選取器是:@selector(setEngine: 
受委派物件如何知道其委派物件是否能處理它(受委派物件)發送給它(委派物件)的訊息? 通過選取器,受委派物件先檢查委派物件,詢問其是否能響應該選取器。如果能,則向它發送訊息。  
8.      
協議: 
正式協議是一個命名的方法列表。 
採用協議意味著必須實現該協議的所有方法。否則,編譯器會發出警告。

 聲明協議: 
@protocal NSCopying 
-(id) copywithzone:(NSZone *) zone; 

//方法列表 

@end 

採用協議: 
@interface Car:NSObject <NSCopying,NSCoding> //中括弧中是要實現的協議列表 

{

//執行個體變數列表

//方法列表 

@end 
在objective-c 2.0中,有新特性:@optional, @required 
     
9.AppKit: 
建立APPKIT項目: 
File—new project—mac os—application—Cocoa application; IBOutlet與IBAction 
這兩個都是APPKIT提供的#defines. IBOutlet沒有任何作用,不會對它進行編譯。 IBAction定義為void。 
這兩個是為Interface Builder以及閱讀代碼的人提供的標記。 

.xib檔案一般稱為.nib檔案。 
.nib檔案是包含被凍結對象的二進位檔案。 而.xib檔案是XML格式的nib檔案。

 

 

http://www.itheima.com/

黑馬程式員——Objective-c特性

相關文章

聯繫我們

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