Objective-C基礎知識點總結

來源:互聯網
上載者:User

標籤:

1、在OC中,[ ]是用來調方法,. 也是找方法,主要是找get方法,->是用來找變數的。_p是直接存取執行個體變數。

2、在OC中,執行個體變數是保護類,不可以在外部存取,但是,在使用@property和@synthesize時,就相當於有了set函數和get函數。

3、build  setting中將autorelease reference counting 自動引用計數器設定為no,即開啟MRC。

4、深拷貝:增加了一個指標並重新開闢了一塊空間,這個增加的指標指向了新開闢的空間,採用這種方式的拷貝,防止出現重複釋放記憶體。copy就是深拷貝。

       淺拷貝:增加了一個指標指向一個已經存在的記憶體空間。retain就是一個淺拷貝。

 5、@property的參數是readonly時,不會產生set函數,所以就不能用self來調用,直接使用_+變數名

6、atomic:對每一個變數進行加鎖操作,(共同搶奪同一塊資源,例如“記憶體,”),加鎖操作是能夠使資源被一個變數使用,不會出現因為相互等待而出現“死結”,浪費資源(調配使用,分配使用順序,耗時)多用在單線程,偶爾也會用在多線程上。

nonatomic:防止給變數加鎖,節約系統資源。

加鎖:就是線程同步,避免多個線程同時訪問全域變數導致資料被破壞,某個線程加了鎖之後,操作完再把鎖釋放,期間要是有其他線程想去訪問被加鎖的變數就需要先拿到鎖,而鎖沒有釋放的話,就只有等待,直到擁有鎖的線程把鎖釋放,表示可以操作它了

7、前向聲明:組合類別的標頭檔處使用前向聲明,在.m檔案中匯入標頭檔。

8、安全執行緒:代碼運行在多線程環境下和運行在單線程曾環境下結果是一樣的。

9、組合類別:組合類別在.h檔案中,使用參數retain。

Strong:系統提供的、自訂的指標使用。與MRC情況下的retain使用方式類似。

Weak:弱引用。只要有一個指標不指向它,就釋放掉記憶體。

Copy:在ARC下也可以使用,相當於assign。但是使用copy,需要實現nscopying協議中的copywithzone方法:

MRC下使用retain、copy, 但是copy在ARC下也可以使用。

10、autorelease加長了對象的生命週期,讓對象的釋放時機延長,浪費了記憶體,在MRC下盡量使用release,但是具體使用,一般是在多個檔案調用這個對象,不確定什麼時候釋放的時候,才使用autorelease。

11、在Object-C中使用結構體和枚舉:(1)訪問結構體變數的某個成員,使用.成員訪問運算子。(2)結構體指標->結構體成員名。(3)(*結構體指標).結構體成員名

12、typedef struct OC_object{

Class isa;

}* id;

id :本身的類型可以轉化為任何一種對象,作為傳回值是一個確定的類型。d可以用來表示任意一個對象,它是一個 objc_object 結構類型的指標,其第一個成員是一個 objc_class 結構類型的指標。在傳回值類型、行參類型、參數類型時使用。

isa:執行個體對象的isa指向它的類。一個對象(Object)的isa指向了這個對象的類(Class),而這個對象的類(Class)的isa指向了metaclass。Object-C對類對象與執行個體對象中的 isa 所指向的類結構作了不同的命名:類對象中的 isa 指向類結構被稱作 metaclass,metaclass 儲存類的static類成員變數與static類成員方法(+開頭的方法);執行個體對象中的 isa 指向類結構稱作 class(普通的),class 結構儲存類的普通成員變數與普通成員方法(-開頭的方法).

 類的執行個體對象的 isa 指向它的類;類的 isa 指向該類的 metaclass;類的 super_class 指向其父類,如果該類為根類則值為 NULL。metaclass 的 isa 指向根 metaclass,如果該 metaclass 是根 metaclass 則指向自身;metaclass 的 super_class 指向父 metaclass,如果該 metaclass 是根 metaclass 則指向該 metaclass 對應的類;Object-C 為每個類的定義產生兩個 objc_class ,一個普通的 class,另一個即 metaclass。我們可以在運行期建立這兩個 objc_class 資料結構,然後使用 objc_addClass將 class 註冊到運行時系統中,以此實現動態地建立一個新的類。

13、多態:用一個父類的指標指向子類的對象,在運行時調用到正確的版本。

(1)用一個基類的指標指向一個子類

(2)將父類指標作為形參,可以使用其子類和本身作為參數傳遞

(3)在複合類中,最好引用高層次的類當做類的成員變數

14、自動釋放池:(1)一定要在自動釋放池中調用autorelease,才會將對象放入自動釋放池中。(2)在自動釋放池中,一定要調autorelease,才會將對象放入自動釋放池中。(3)只要在自動釋放池中調用autorelease,就會將對象放入自動釋放池中。

15、分類和擴充:分類可以為類添加方法,但是不可以添加變數。擴充既可以添加方法,又可以添加變數。但是如果是單獨寫的一個擴充檔案,那就可以訪問到變數和方法。如果將類的擴充寫到類的.m檔案中,既不可以訪問到變數,也不可以訪問到方法。

16、字串操作:

 

 

17、NSArray建立使用NSArray *ary = [[NSArray alloc] initWithObjects:@”jeo”,@”jun”,nil];在多個檔案中使用時,自己手動開闢,不會被回收。而NSArray *arr = [NSArray arryayWithObjects:@”jeo”,@”jun”,nil];也可以使用NSArray *ary = @[@”hello”,@”world”];(這種是在iOS8之後出現的)

是系統管理的,如果在多檔案中使用,會造成程式掛掉。

某個對象在數組中是否存在,返回BOOL值:[arr containsObject:@”jeo”];

對數組進行排序,使用系統的方法:NSArray *ary = [arr sortedArrayUsingSelector:@selector(compare:)];因為該方法的排序不影響原數組的順序,需要用新的數組進行接收。

快速遍曆數組;

for(id num in ary){NSLog(@”%@”,num);}數組中存在不同類型的對象,使用id最好,可以接收任何類型的對象。

18、字典:沒有先後順序之分,因為字典是無序的

NSDictionary *d= @{@”1”:@”123”,@”2”:@”456”};

NSString *str = d[@”1”];

NSDictionary *d = [NSDictonary dictionaryWithObjectsAndKeys:@”123”,@”1”,@”456”,@”2”,nil];

NSString *str = [d objectForKey:@”1”];

通過NSArray *ary = [d allValues];可以輸出所有的值,同理調用[d allKeys]可以調出所有的鍵。

NSDictoinary *d = [NSDictonary dictionaryWithAllValues:@”123”,@”456” forKeys:@”1”,@“2”];也可以聲明一個字典

NSMutableDictonary *dic = [NSMutableDictonary dictionary];

[dic setObject:@”123” forKey:@”1”];

[dic setObject:@”456” forKey:@”2”];為字典添加索引值對

[dic removeObjetsForKeys:[NSArray arrayWithObjects:@”1”]];刪除某個值

for(id object in [dic allValues]){NSLog(@”%@”, object);}

快速遍曆字典,並取出其中的值。

18、檔案儲存體儲存的是基本的對象,自己寫的類和對象是寫不進去的,想要寫進自己編寫的類,就要遵循NSCoding協議,對檔案總的變數編解碼,實現-(void)encodeWithCoder:(NSCode *)aCoder;進行編碼

-(instanceType)initWithCoder:(NSCode *)aDecoder;進行解碼

但是編碼的都是對象,要將基礎類型的變數轉換為對象。然後將類的對象存入檔案(歸檔):Person *p = [[Person alloc] init];

[NSKeyedArchiver archiveRootObjectObject:p toFile:str];

Person *p = [NSDeyedUnArchiver unArchiveObjectWithFile:str];

建立檔案管理類:NSFileManager,一般使用defaultManager,常使用的類:-(NSData *)contentsAtPath:(NSString *)path;屬性currentDirectionaryPath管理目錄。NSHomeDirectionary擷取主目錄,而[[NSFileManager defaultManager] currentDirectionary]擷取目前的目錄。

19、循環參考:

 1、循環參考其中一個變數使用assign模式

 2、在dealloc中為assign模式的不用release

 

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.