Objective-C:C + 面向?qū)ο?br> 與C的不同:
使用#import代替#include, 可避免C中反復(fù)包含同一頭文件,或者使用 if not define的繁瑣
使用NSString代替C中的String,增強(qiáng)了字符串的功能
BOOL代替C中的布爾變量 YES //TODO-
OC中的面向?qū)ο螅?/p>
-
extensions
- .h 同傳統(tǒng)C語(yǔ)言中的方法定義的頭文件。頭文件包含類(lèi),類(lèi)型,函數(shù)和常數(shù)的聲明。
- .m 源代碼文件。可以包含 Objective-C 和 C 代碼,類(lèi)似.c文件
- .mm 為了使用C++特性
interface
類(lèi)似C++中類(lèi)的頭文件聲明或Java類(lèi)文件中的public(protected)的方法和實(shí)例變量
+/- 類(lèi)似Java中的static與否implementation
實(shí)現(xiàn)區(qū)塊則包含了公開(kāi)方法的實(shí)現(xiàn),以及定義私有(private)變量及方法。 以關(guān)鍵字@implementation作為區(qū)塊起頭,@end結(jié)尾protocol
類(lèi)似Java中的interface,但引入@optional后為可選實(shí)現(xiàn)(同swift)
與Java不同:即使沒(méi)有聲明符合某個(gè)protocol,仍然可以實(shí)現(xiàn)某個(gè)protocol并被外部調(diào)用(外部不知道有沒(méi)有,但因?yàn)镺C是消息傳遞機(jī)制,所以仍然可以訪問(wèn)),即聲明符合某個(gè)protocol只是為了使得調(diào)用時(shí)安全的-
property
通過(guò)聲明@property(attributes)來(lái)避免重復(fù)的getter&&setter方法
默認(rèn)關(guān)鍵字: assign, atomic, readwrite- property關(guān)鍵字
-
Set類(lèi)型(暫時(shí)知道哪些用哪個(gè)關(guān)鍵字)
- assign: 簡(jiǎn)單賦值,不更改索引計(jì)數(shù), 對(duì)基礎(chǔ)數(shù)據(jù)類(lèi)型 (NSInteger)和C數(shù)據(jù)類(lèi)型(int, float, double, char, 等)
- copy:建立一個(gè)索引計(jì)數(shù)為1的對(duì)象,然后釋放舊對(duì)象, 針對(duì)NSString(聲明一個(gè)新的對(duì)象)
- retain:釋放舊的對(duì)象,將舊對(duì)象的值賦予輸入對(duì)象,再提高輸入對(duì)象的索引計(jì)數(shù)為1, 針對(duì)其他NSObject和其子類(lèi)(聲明一個(gè)新的指針)
atomic、nonatomic:指定setter和getter是否是原子操作,即是否線程安全。如果是atomic,那么存取方法都是線程安全的,即某一線程訪問(wèn)存或者取方法,其他線程不可以進(jìn)入該存、取方法。nonatomic則不具備線程安全的功能。需要指出的是atomic是默認(rèn)值,可以保證數(shù)據(jù)的完整性,但是相應(yīng)的降低了性能,所以在單線程環(huán)境中建議使用nonatomic來(lái)提升性能。
getter、setter:用于為getter方法、setter方法指定自定義方法名。比如getter=myName,setter=setName:,我們可以看到setter方法后面有一個(gè)(:),這是因?yàn)槲覀冃枰诤竺嫣砑訁?shù)。
readonly、readwrite:readonly指示系統(tǒng)只合成getter方法,不合成setter方法;readwrite是默認(rèn)值,指示系統(tǒng)需要合成setter方法和getter方法。
strong、weak:strong指示符該屬性對(duì)被賦值對(duì)象持有強(qiáng)引用,而weak指示符指定該屬性對(duì)被賦值對(duì)象持有弱引用。強(qiáng)引用的意思是:只要該強(qiáng)引用指向被賦值的對(duì)象,那么該對(duì)象就不會(huì)自動(dòng)回收。弱引用的意思是:即使該弱引用指向被賦值的對(duì)象,該對(duì)象也可能被回收。如果不希望對(duì)象被回收,可以使用strong指示符。如果需要保證程序性能,避免內(nèi)存溢出,可以使用weak,內(nèi)存一旦被回收,指針會(huì)被賦值為nil。unsafe_unretained:與weak不同,被unsafe_unretained指針?biāo)玫膶?duì)象被回收后,unsafe_unretained指針不會(huì)被賦為nil,可能會(huì)導(dǎo)致程序出錯(cuò)。
-
- property關(guān)鍵字
-
OC一些特別的語(yǔ)法:
Category: 擴(kuò)展,類(lèi)似Swift的extension
擴(kuò)展已有的類(lèi)
作為子類(lèi)的替代方案
通過(guò)使用多個(gè)代碼文件來(lái)定義一個(gè)類(lèi)OC與Java的對(duì)比:
OC通過(guò)將類(lèi)的實(shí)例變量放在.h和.m文件中來(lái)區(qū)分是否可被外界訪問(wèn),Java通過(guò)Private等權(quán)限訪問(wèn)關(guān)鍵字聲明
Objective-C具備動(dòng)態(tài)類(lèi)型:即消息可以發(fā)送給任何對(duì)象實(shí)體,無(wú)論該對(duì)象實(shí)體的公開(kāi)接口中有沒(méi)有對(duì)應(yīng)的方法
Objective-C 基礎(chǔ)語(yǔ)法知識(shí)點(diǎn)整理
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- Objective-C 1. import的用法 拷貝文件內(nèi)容可以自動(dòng)防止文件的內(nèi)容被重復(fù)拷貝(#define宏定...
- 重點(diǎn)掌握 3 類(lèi)對(duì)象和方法 對(duì)象就是一個(gè)物體 類(lèi)的獨(dú)特存在就是一個(gè)實(shí)例,對(duì)實(shí)例進(jìn)行操作叫做方法。方法可以應(yīng)用于類(lèi)或...
- 1.項(xiàng)目經(jīng)驗(yàn) 2.基礎(chǔ)問(wèn)題 3.指南認(rèn)識(shí) 4.解決思路 ios開(kāi)發(fā)三大塊: 1.Oc基礎(chǔ) 2.CocoaTouch...
- 37.cocoa內(nèi)存管理規(guī)則 1)當(dāng)你使用new,alloc或copy方法創(chuàng)建一個(gè)對(duì)象時(shí),該對(duì)象的保留計(jì)數(shù)器值為1...
- 為什么很多內(nèi)置類(lèi)如UITableView的delegate屬性都是assign而不是retain? 所有的引用計(jì)數(shù)...