OC學習筆記 注意事項

2021-09-21 11:15:50 字數 2462 閱讀 2708

alloc  new  retain之後都必須要呼叫release方法 計數器要變只有這幾種方法 retain release alloc new copy方法才會使計數器改變,誰想用人家物件,就對他進行retain操作,但在dealloc釋放本物件的時候也釋放引用的物件,先釋放引用的物件,然後釋放自己,

記憶體管理做到」誰汙染誰治理「,誰呼叫誰retain,是銷毀 也要銷毀retain的物件

當自己手動寫get和set方法的時候,系統就不會幫我們生成synthesize,就不會自動產生下劃線物件,所以在手動寫get和set方法的時候如果用到下劃線欄位就會報錯

excu_bad_access就是野指標錯誤,訪問了乙個不屬於你的記憶體空間

單例中千萬不能寫dealloc方法

assign:相當於str=str+1,是潛拷貝。對基礎資料型別,(nsinteger,cgfloat)和c資料型別(int,float,  

double,char,等等)

copy:對nsstring

retain:對其他nsobject和其子類

assign:相當於str=str+1,是淺拷貝。對基礎資料型別,(nsinteger,cgfloat)和c資料型別(int,float, 

double,char,等等)

copy:對nsstring

retain:對其他nsobject和其子類

nsmutablestring *str1 = [nsmutablestring stringwithstring:@"mmmmmm"];

nsstring *str2 = [str1 copy];  //拷貝乙份出來,如果不用copy的話,後面對str1進行修改,那麼也會影響str2的賦值

[str1 release];

nslog(@"%@",str2);

用點語法,引用計數器就加1

-(id)initwithcoder:(nscoder *)adecoder

return self; }

retain:

-(void)setname:(nsstring *)name }

[stu release];

[stu release]; //野指標(會報錯)  野指標指指向的內容不屬於你的

stu = nil;//指將指標所指向的那條線給擦掉

[nil release]; //空指標(不報錯)  空指標指指向的線斷了,等於不指向什麼記憶體空間

@class student 在子類中申明student是乙個類,就不需要寫@import "student.h",因為那樣會降低效能,import相當於把所有的標頭檔案都拷貝過去了,在.m檔案中寫@import "student.h",因為.m檔案中真正要使用student的那些方法。

@class有些功能 @import是做不到的  當兩個類相互包含的時候,相互@import的時候就會出錯,但@class相互包含就不會報錯,只是什麼這是乙個類,如果有上百個類都要引用student這個類,那麼用@import的話,只要student類中有一點點改變,這些都要重新

編譯,所以還是用@class比較好

標準的set方法(也就是retain的內部實現機制)

-(void)setbook:(book*)book

標準的dealloc方法

-(void)dealloc

標準的初始化方法

- (id)initwithage:(int)age

return self; }

然後建立物件:

student *stu = [student alloc] initwithage:22];

stu.name = @"dingxiaowei";

nslog(@"%@",stu);

[stu release];

@class student 在子類中申明student是乙個類,就不需要寫@import "student.h",因為那樣會降低效能,import相當於把所有的標頭檔案都拷貝過去了,在.m檔案中寫@import "student.h",因為.m檔案中真正要使用student的那些方法。

@class有些功能 @import是做不到的  當兩個類相互包含的時候,相互@import的時候就會出錯,但@class相互包含就不會報錯,只是什麼這是乙個類,如果有上百個類都要引用student這個類,那麼用@import的話,只要student類中有一點點改變,這些都要重新編譯,所以還是用@class比較好

category能夠動態給某個類動態的拓展方法,但不能新增屬性

用category建立的分類,@inte***ce student(test),類名後面如果有括號代表分類名稱,如果後面有冒號,則代表繼承,分類也要import匯入要拓展的.**件,但不能用@class,因為要對那個累拓展方法,所以要@import複製出有哪些方法,才能防止申明重複的同名方法

alloc new copy 是深拷貝,retain是淺拷貝

autorelease不是立即釋放,是等到程式結束的時候將每個物件釋放一次

OC語言注意事項

方法 1.物件方法都是以減號 2.物件方法的宣告必須寫在 inte ce和 end之間 物件方法的實現必須寫在 implementation和 end之間 3.物件方法只能由物件來呼叫 4.物件方法歸類 物件所有 函式1.函式能寫在檔案中的任意位置 inte ce和 end之間除外 函式歸檔案所有 ...

OC語言注意事項一

import 與 include 的區別 在c語言中,我們想要讓編譯器複製一些標頭檔案到現在的原始檔,俗稱引入標頭檔案,或者包含標頭檔案,使用 include。例如有三個單獨沒有聯絡的標頭檔案firstfloor.h,secondfloor.h,thirdfloor.h,現在secondfloor....

oc語言注意事項五

在oc裡也有構造方法,initwith 用來初始化建立的物件。在使用initwith 方法的時候,一定要記得加上元祖類nsobject的初始化方法 init id initwith return self 這是oc裡面初始化固定模式,和其他物件導向語言的初始化物件不一樣。其實在oc裡面,物件的初始化...