OC學習總結(二)
oc學習總結(二)
7、記憶體管理
》以下兩種情況發生時,所有者物件將會獲得該物件的所有權
建立或者複製物件:alloc, allocWithZone:, copy, copyWithZone:, mutableCopy, mutableCopyWithZone:
保留物件:retain
》在不需要時所有者物件必須釋放對該物件的所有權
release, autorelease
》release的一些場景
1、alloc後不用時
2、陣列的addObject後
3、物件持有其他物件所有權時的dealloc方法中
8、點語法
》賦值
assign:直接賦值(相當於一個別名),default。
retain:保留物件,兩個物件指向同一記憶體區域
copy:拷貝物件,開闢新空間。指向不同記憶體空間。有時相當於retain。必須實現NSCopying協議
》讀寫性
readwrite:生成getter和setter,default
readonly:只有getter
》原子性(多執行緒環境下)
nonatomic:不鎖定,
atomic:鎖定,執行緒保護,default
9、檔案管理
》NSFileManager
檔案(目錄)的建立,刪除等操作,構造方法[NSFileManager defaultManager]
》NSFileHandle
檔案內容的建立,修改等操作,可以建立分別用於讀、寫和修改的handle物件
10、NSTimer定時器
》常用方法
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti
target:(id)aTarget selector:(SEL)aSelector
userInfo:(id)userInfo repeats:(BOOL)yesOrNo;
ti:間隔時間,秒數
target:selector所屬物件
selector:間隔執行方法,一般包含一個NSTimer引數timer,可以將當前建立的NSTimer傳遞給該方法
userInfo:一般用於傳遞引數給selector,取出timer.userInfo
repeats:是否重複執行
》在控制檯程式中,為避免main函式過早return後,定時器無法起作用,
這時必須使用[[NSRunLoop currentLoop] run]來使程式一直執行起
11、物件的深淺拷貝
》拷貝必須實現拷貝協議NSCopying和NSMutableCopying,實現copyWithZone方法
》copy和mutableCopy都是NSObject中的方法,呼叫時會呼叫NSCopying協議中得copyWithZone方法
》Foundation框架中,當copy的是一個不可變物件時,相當於retain(cocoa做得記憶體優化)
mutableCopy或者是可以變物件的copy都是拷貝一個新物件
》淺拷貝:只拷貝物件本身,不拷貝物件的屬性;深拷貝:拷貝物件包含的屬性;Foundation中支援拷貝的物件
都只是淺拷貝,包括NSNumber,NSArray,NSString,NSDictionary,NSMutableArray,
NSMutableDictionary,NSMutableString
12、物件的歸檔
》歸檔NSKeyedArchiver,可以指定key來序列化多個物件在同一個檔案中
》解歸檔NSKeyedUnarchiver
》物件必須實現NSCoding協議才能進行歸檔和解歸檔
- (void)encodeWithCoder:(NSCoder *)aCoder; 歸檔
- (id)initWithCoder:(NSCoder *)aDecoder; 解歸檔
13、 單例模式
》應用場景
1、儲存全域性資料
2、重量級物件:初始化耗費資源的物件,提高效率
》單例物件的建立
1、定義一個靜態全域性值為nil的物件 static AppManager *manager = nil;
2、定義一個類方法建立物件 + (id)shareManager;
+ (id)shareManager{
//此處必須加執行緒保護,防止多執行緒環境中建立出多個例項
@synchronized(self){
if(manager==nil){
manager = [[AppManager alloc] init];
}
}
return manager;
}
3、覆蓋+ (id)allocWithZone:(NSZone *)zone;方法,防止直接呼叫alloc方法建立出新的物件
4、覆蓋- (id)copyWithZone:(NSZone *)zone;方法,防止呼叫copy(返回靜態例項)方法建立出新物件
5、覆蓋release(不做任何操作),autorelease(返回靜態例項)方法,防止物件的銷燬
6、覆蓋retain方法,返回靜態例項
7、覆蓋retainCount方法,直接放回UINT_MAX
版權宣告:本文為博主原創文章,未經博主允許不得轉載。
相關文章
- OC學習總結(三)
- OC學習總結(一)
- 考研學習總結(二)
- 第二週學習總結
- shell基礎學習總結(二)
- iOS底層原理總結--OC物件的本質(二)iOS物件
- 學習總結
- JAVA學習-------第二週知識點總結Java
- 編譯原理第二章學習總結編譯原理
- JavaScript學習總結(二)陣列和物件部分JavaScript陣列物件
- canvas複習總結(二)Canvas
- jquery複習總結二jQuery
- React元件化學習總結第二天React元件化
- Solr學習總結(二)Solr的安裝與配置Solr
- Snmp學習總結(二)——WinXP安裝和配置SNMP
- mysqlimport學習總結MySqlImport
- Maven學習總結Maven
- MyBatis 學習總結MyBatis
- awk 學習總結
- JNI 學習總結
- tkinter學習總結
- SVG學習總結SVG
- vue學習總結Vue
- WorkFlow學習總結
- HTML學習總結HTML
- Mybatis學習總結MyBatis
- Kafka 總結學習Kafka
- Typescript學習總結TypeScript
- 【TS】學習總結
- lua 學習總結
- vue 學習總結Vue
- HSF學習總結
- ElasticSearch 學習總結Elasticsearch
- BOM學習總結
- JavaWeb學習總結JavaWeb
- Storm學習總結ORM
- redis學習總結Redis
- JVM學習總結JVM