標籤:
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基礎知識點總結