ios-關(guān)于OC的初步學(xué)習(xí)

目錄

類 對象

繼承 多態(tài) 方法

NSSTring NSValue NSNumber

集合

內(nèi)存管理

屬性

設(shè)計(jì)模式 引用傳值

類目 延展 協(xié)議

begain

1

一個(gè)對象永遠(yuǎn)不會保存另外一個(gè)對象(保存指針)

面向?qū)ο缶幊陶Z言的特點(diǎn):封裝,繼承,多態(tài)

NextSTEP = cocoa

@class Hero 1.預(yù)先申明,避免交叉引用 2.代替#import ,不需要 導(dǎo)入頭文件重新編譯

@class #import #include的區(qū)別 ?????????

OC 數(shù)據(jù):typedef類型(NSInteger(= int long),CGFloat(= float,double),NSPoint( = struct _NSPoint)) 和對象類型(NSString(!= char *),NSNumber)

nextStep, cocoa的由來:oc開始火爆的原因和時(shí)間:

面向?qū)ο螅悍庋b(隱藏內(nèi)部實(shí)現(xiàn),穩(wěn)定外部接口,封裝就是定義類,定義屬性,定義方法),繼承(子類可以復(fù)用父類所有方法的申明和實(shí)現(xiàn),非私有的實(shí)例變量以及協(xié)議,繼承具有單根性和傳遞性,繼承就是代碼優(yōu)化公共部分交給父lei),多態(tài)(不同對象對同一消息的不同響應(yīng),子類可以重寫父lei的方法,多態(tài)就是允許方法重名,參數(shù)或返回值可以使父類型傳入或者返回,description,init)

OC 具有靜態(tài)語言的特性,又有動態(tài)語言的效率

動態(tài)類型(id類型):在編譯時(shí)不能識別,只有運(yùn)行時(shí)才可

動態(tài)綁定(@select / SEL):oc中無函數(shù)概念只有消息機(jī)制,跳過編譯,運(yùn)行時(shí)才動態(tài)的添加函數(shù)調(diào)用,在運(yùn)行時(shí)才決定調(diào)用什么方法,需要傳模式參數(shù)進(jìn)去,要實(shí)現(xiàn)他就定義一個(gè)SEL整數(shù)(方法的ID)遍歷綁定一個(gè)方法來引用(函數(shù)調(diào)用是根據(jù)函數(shù)名字符串來查找,速度比根據(jù)整數(shù)查找慢)

動態(tài)加載:動態(tài)的加載資源,

@的作用:關(guān)鍵字起始符

init初始化

dealloc 屬性減一 |release 對象計(jì)數(shù)減一

傳值方式:單例,NSUserdefault,屬性,KVO,KVC,通知(NSNoticationCenter)

類簇(class cluster,抽象工廠類,提供抽象接口,具體實(shí)現(xiàn)由內(nèi)部類實(shí)現(xiàn))類:NSString,NSNumber,NSDictinary,NSArray

----------------------------

類目:系統(tǒng)的類不可以添加屬性,其他可以,但是要自己寫setter getter方法,一般都可添加方法

延展:不可見

協(xié)議:

-----------------------------

私有成員變量:其他類訪問不到

屬性:整個(gè)工程都可見

------------------------------

clang llvm( Low Level Virtual Machine )龍書

Clang 是一個(gè) C++ 編寫、基于 LLVM、發(fā)布于 LLVM BSD 許可證下的 C/C++/Objective C/Objective C++ 編譯器,其目標(biāo)(之一)就是超越 GCC。

設(shè)計(jì)模式:KVO KVC 單例 代理模式

2.OC 與 C 與 C++的不同點(diǎn):

OC:面向?qū)ο?,動態(tài)的封閉語言,單繼承(有protocols和categories),smalltalk學(xué)派(更靈活,允許出錯),c的超集(可兼容C的全部語法)

C++: 面向?qū)ο螅o態(tài)的封閉語言,多繼承,simula 67學(xué)派(更安全,不靈活),兼容C的大部分語法

C :面向過程,開源語言

3.import :防止重復(fù)引用頭文件

4.int main(int argc, const char * argv[] char **env) : 首先是一個(gè)計(jì)算提供的參數(shù)到程序, 第二個(gè)是對字符串?dāng)?shù)組的指針。

argc: 整數(shù),用來統(tǒng)計(jì)你運(yùn)行程序時(shí)送給main函數(shù)的命令行參數(shù)的個(gè)數(shù)

argv[ ]: 字符串?dāng)?shù)組,用來存放指向你的字符串參數(shù)的指針數(shù)組,每一個(gè)元素指向一個(gè)參數(shù)

argv[0] 指向程序運(yùn)行的全路徑名或者程序名字 argv[1] 指向在DOS命令行中執(zhí)行程序名后的第一個(gè)字符串 argv[2] 指向執(zhí)行程序名后的第二個(gè)字符串 ... argv[argc]為NULL

**env:字符串?dāng)?shù)組。env[ ]的每一個(gè)元素都包含ENVVAR=value形式的字符 串。其中ENVVAR為環(huán)境變量,value 為ENVVAR的對應(yīng)值。 argc, argv,env是在main( )函數(shù)之前被賦值的,編譯器生成的可執(zhí)行文件,main( )不是真正的入口點(diǎn),而是一個(gè)標(biāo)準(zhǔn)的函數(shù),這個(gè)函數(shù)名與具體的操作系統(tǒng)有關(guān)。

5.@ 關(guān)鍵字起始符號

6.框架是一組類的集合,而這些類互相關(guān)聯(lián),cocoa Touch是一組框架的集合

7.面向?qū)ο蟮幕卣{(diào)機(jī)制:

委托:單個(gè)委托對象可以接收針對某個(gè)特定對象的全部事件消息,對象只 能向其委托對象發(fā)送一組特定協(xié)議所申明的消息

凡是支持委托的對象,其背后都有一個(gè)相應(yīng)的協(xié)議,申明可以向該委托對象發(fā)送的消息,為其感興趣的事件實(shí)現(xiàn)相應(yīng)的方法;

如果某個(gè)類實(shí)現(xiàn)了某個(gè)協(xié)議中的方法,則該類遵守該協(xié)議

目標(biāo)動作對:當(dāng)某個(gè)特定事件發(fā)生時(shí),發(fā)生的事件的一方會向指定的目標(biāo)對象發(fā)送一個(gè)之前設(shè)定好的動作消息,針對不同事件(請按),需要創(chuàng)建不同的目標(biāo)動作對。

8.協(xié)議不是類,是一組特定的方法,不能為協(xié)議創(chuàng)建實(shí)例,或添加實(shí)例變量,協(xié)議自身不實(shí)現(xiàn)方法,需要由遵循相應(yīng)協(xié)議的類實(shí)現(xiàn)

用于委托的協(xié)議成為委托協(xié)議,不是所有協(xié)議都是委托協(xié)議

delegate 特性:_unsafeunretained(防止retain循環(huán))

9.構(gòu)建階段:編譯源代碼(預(yù)處理,編譯),連接二進(jìn)制文件和庫,拷貝程序資源

預(yù)處理:處理#語句(import / define),預(yù)處理為中間文件.ml文件

編譯:將中間文件轉(zhuǎn)換為機(jī)器碼,不過也保存在中間文件中---編譯時(shí)錯誤,為語法錯誤

連接:設(shè)置鏈接,指向被鏈接的文件(框架是類的集合,其實(shí)現(xiàn)文件已編譯,是目標(biāo)文件,為庫)---連接器錯誤,無法處理鏈接,找不到文件或者

10.getter setter 用于保護(hù)變量不被外界訪問(默認(rèn)為peotected屬性,不能被外界訪問,設(shè)置為public則容易被攻擊,因?yàn)榇蠹叶伎梢栽L問)的時(shí)候,公開這兩個(gè)方法(方法默認(rèn)為public)即可以通過這個(gè)方法訪問成員變量

11.protected private public ????????????? 作用域 當(dāng)前類 同一package 子孫類 其他package

public? √? ? ? √? ? ? ? ? ? ? √? ? ? √

protected √? ? √? ? ? ? ? ? ? √? ? ? ×

friendly? √? ? √? ? ? ? ? ? ? ×? ? ? ×

private? √? ? ? ? ×? ? ? ? ? ? ? ×? ? ? ×

12.oc中調(diào)用方法時(shí),不看指針看對象,稱為虛方法

13.

(1).3種類型集合:數(shù)組NSarray 字典 NSDictionary(無序) 集NSSet(無序,哈希算法,內(nèi)存不連續(xù),只能一次取一個(gè)或者全部取出,不可重復(fù),如有重復(fù)自動清除)

(2).集合中都只能是對象,這個(gè)對象是數(shù)組

(3).集合中不能存放Nil對象,nil是集合結(jié)束符標(biāo)識

(4). ios5 (不可變): 字符串:@"",id:@()? ,NSArray :@[], NADictionary: @{} char[] @encode()


14.內(nèi)存:程序運(yùn)行時(shí)臨時(shí)分配的存儲空間,在程序結(jié)束后釋放

(1).繼承自NSObject的對象才需要進(jìn)行內(nèi)存管理

(2).對象的生命周期:初始化,使用,釋放

(3).@property:

Retain:對對象release舊值,retain新值(適用于OC對象類型)

Assign:直接賦值(默認(rèn),適用于非oc對象類型]

Copy:release舊值,copy新值

(4)Autorelease注意:

1)系統(tǒng)自帶的方法中,如果不包含alloc new copy等,則這些方法返回的對象都是autorelease的,如[NSDate? date];

2)開發(fā)中經(jīng)常會寫一些類方法來快速創(chuàng)建一個(gè)autorelease對象,創(chuàng)建對象時(shí)不要直接使用類名,而是使用self

(5).ARC準(zhǔn)則:無強(qiáng)指針,則釋放,

(6).通過便利構(gòu)造創(chuàng)建的對象不需要進(jìn)行release操作

15.KVC運(yùn)用了一個(gè)isa-swizzling技術(shù)。

isa-swizzling就是類型混合指針機(jī)制。KVC主要通過isa-swizzling,來實(shí)現(xiàn)其內(nèi)部查找定位的。

isa指針,就是is a kind of的意思,指向維護(hù)分發(fā)表的對象的類。該分發(fā)表實(shí)際上包含了指向?qū)崿F(xiàn)類中的方法的指針,和其它數(shù)據(jù)。 KVC在調(diào)用方法setValue的時(shí)候

(1)首先根據(jù)方法名找到運(yùn)行方法的時(shí)候所需要的環(huán)境參數(shù)。

(2)他會從自己isa指針結(jié)合環(huán)境參數(shù),找到具體的方法實(shí)現(xiàn)的接口。

(3)再直接查找得來的具體的方法實(shí)現(xiàn)。

這樣的話前面介紹的KVO實(shí)現(xiàn)就好理解了

當(dāng)一個(gè)對象注冊了一個(gè)觀察者,被觀察對象的isa指針被修改的時(shí)候,isa指針就會指向一個(gè)中間類,而不是真實(shí)的類。

所以isa指針其實(shí)不需要指向?qū)嵗龑ο笳鎸?shí)的類。所以我們的程序最好不要依賴于isa指針。在調(diào)用類的方法的時(shí)候,最好要明確對象實(shí)例的類名。

這樣只有當(dāng)我們調(diào)用KVC去訪問key值的時(shí)候KVO才會起作用。所以肯定確定的是,KVO是基于KVC實(shí)現(xiàn)的。

正則表達(dá)式

1.驗(yàn)證用戶名和密碼:"^[a-zA-Z]\w{5,15}$"

2.驗(yàn)證電話號碼:"^(\d{3,4}-)\d{7,8}$"

3.驗(yàn)證手機(jī)號碼: "^1[3|4|5|7|8][0,9]\d{8}$"

4.驗(yàn)證Email地址:(“^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)$”)

5.只能輸入整數(shù)或者小數(shù):^[0-9]+([.]{0,1}[0-9]+){0,1}$

6.只能輸入漢字:”^[\u4e00-\u9fa5]{0,}$”。

7.匹配雙字節(jié)字符(包括漢字在內(nèi)):[^\x00-\xff](計(jì)算字符串長度,一個(gè)雙字節(jié)字符長度記2 ASCii字符記1)

8.匹配空白行的正則表達(dá)式:\n\s\r(刪除空白行)

9.匹配帳號是否合法(字母開頭,允許5-16字節(jié),允許字母數(shù)字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$(表單驗(yàn)證時(shí)很實(shí)用)

10.\num 匹配num,其中num是一個(gè)正整數(shù)。對所獲取的匹配的引用。例如,“(.)\1”匹配兩個(gè)連續(xù)的相同字符。

x .== 判斷內(nèi)存地址 基本變量 對于一些基本類型 可以使用==來判斷,但對于指針類型,使用==則判斷的是指針保存的內(nèi)容地址是否相等,而不是判斷內(nèi)存地址下的內(nèi)容是否相等(應(yīng)該通過方法來判斷)

y. 靜態(tài)方法返回的對象一般都不需要手動釋放內(nèi)存

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,983評論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,772評論 3 422
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,947評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,201評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,960評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,350評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,406評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,549評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,104評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,914評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,089評論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,647評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,340評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,753評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,007評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,834評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,106評論 2 375

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,753評論 0 9
  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,197評論 30 471
  • 1.項(xiàng)目經(jīng)驗(yàn) 2.基礎(chǔ)問題 3.指南認(rèn)識 4.解決思路 ios開發(fā)三大塊: 1.Oc基礎(chǔ) 2.CocoaTouch...
    陽光的大男孩兒閱讀 5,012評論 0 13
  • __block和__weak修飾符的區(qū)別其實(shí)是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,352評論 0 6
  • 本文為林炎小寶原創(chuàng),轉(zhuǎn)載請聯(lián)系 人機(jī)大戰(zhàn), 水哥輸了 星期五晚上,最強(qiáng)大腦人機(jī)大戰(zhàn)第三輪,代表人類出戰(zhàn)的水哥(不知...
    林炎小寶閱讀 1,529評論 14 11