第一篇

其實讀研之前,我一直都有寫東西記錄生活的習慣瑰抵,不過以前可能會有點傻傻的乓搬,每隔一段時間寫一堆無病生吟的東西發(fā)表在QQZone,引來若干好友的稱贊,現(xiàn)在想來真是幼稚之極茴迁。為什么又開始寫這個呢,主要是來記錄和分享自己學習iOS的過程和心得吧酱塔,開始接觸大概有3個月了绳矩,刨去中間改論文備考公務員的一個月,實實在在的看書敲代碼應該有一個多月吧疟呐,看了好多大神的技術(shù)博客脚曾,也在很多國外的網(wǎng)站上找到了自己所遇到問題的答案,我在學習的時候比較習慣用筆和紙來做記錄启具,于是考慮是不是可以把遇到的問題本讥,學到的新知識,學習的點點滴滴在一個公開的地方記錄下來鲁冯。昨天跑去面試時面試官也建議我要學會分享拷沸,算不上分享,更多是自己的記錄吧薯演。

第一課我決定把昨天面試問到的一些問題總結(jié)一下撞芍,基本上之前看書都有看到過,可真正來解釋和回答的時候跨扮,發(fā)現(xiàn)還是很無力序无。

1.iOS中類別(Category)和擴展(Extension)的區(qū)別。

在為系統(tǒng)類作擴展的時候衡创,我們可以不用繼承系統(tǒng)類帝嗡,不需要訪問類的代碼,在不知道源代碼和不能修改的情況下璃氢,直接給系統(tǒng)類添加方法哟玷。

1) Category的方法不一定非要在@implementation中實現(xiàn),也可以在其他位置實現(xiàn)拔莱,但是當調(diào)用Category的方法時碗降,依據(jù)繼承樹沒有找到該方法的實現(xiàn)隘竭,程序則會崩潰。

2) Category是類的擴展讼渊,只能申明方法动看,不能申明變量。理論上不能添加變量爪幻,但是可以使用@dynamic來彌補這種不足菱皆。 (即運行時Runtime)

3)類別的方法中,不可以調(diào)用super方法挨稿。

4)Category方法可能會覆蓋同一個class的其它category方法仇轻,也可能被覆蓋,因為不知道他們加載的先后順序奶甘,出現(xiàn)這種情況在編譯的時候就會報錯篷店。如果在開發(fā)中使用了類別,最好保證類別名不同于使用者的類別名,類別方法名也不同于使用者的類別方法名臭家。

5)下列情況下使用類別:對框架提供的擴展;不想生成新的子類的情況下的擴展;方便做項目管理疲陕,可以將一份源碼在多個地方共享或者做方法版本管理,多人協(xié)作開發(fā)钉赁,用本地版本替換公共版本的實現(xiàn)蹄殃。

擴展是一種匿名分類;但是和匿名分類不一樣的是你踩,擴展可以添加新的實例變量诅岩。一般Extension都是放在.m文件的@implementation的上方,而且必須在@implementation中實現(xiàn)带膜,否則在編譯中會報錯吩谦。

某些情況下,我們需要聲明一個@property钱慢,它對外是只讀的(readonly)而對內(nèi)是可讀寫的(readwrite)逮京,這時,可以通過Extension實現(xiàn)束莫。

2.__weak和__block的區(qū)別

這部分知識在block里有詳細講解懒棉,而且很重要,以后會專門用一篇來總結(jié)览绿。

3.屬性關(guān)鍵字

NSString *pt = [[NSString alloc] initWithString:@"abc"];

上面一段代碼會執(zhí)行以下兩個動作

1.在堆上分配一段內(nèi)存用來存儲@"abc"??比如:內(nèi)存地址為:0X1111?內(nèi)容為?"abc"

2.在棧上分配一段內(nèi)存用來存儲pt??比如:地址為:0Xaaaa?內(nèi)容自然為0X1111

assign的情況:NSString?*newPt?=?[pt?assign];

此時newPt和pt完全相同?地址都是0Xaaaa??內(nèi)容為0X1111??即newPt只是pt的別名策严,對任何一個操作就等于對另一個操作。?因此retainCount不需要增加饿敲。

retain的情況:NSString?*newPt?=?[pt?retain];

此時newPt的地址不再為0Xaaaa妻导,可能為0Xaabb?但是內(nèi)容依然為0X1111。?因此newPt?和?pt?都可以管理"abc"所在的內(nèi)存。因此?retainCount需要增加1

copy的情況:NSString?*newPt?=?[pt?copy];

此時會在堆上重新開辟一段內(nèi)存存放@"abc"?比如0X1122?內(nèi)容為@"abc?同時會在棧上為newPt分配空間?比如地址:0Xaacc?內(nèi)容為0X1122?因此retainCount增加1供newPt來管理0X1122這段內(nèi)存倔韭。

assign:簡單賦值术浪,不更改索引計數(shù)(Reference Counting)。對基礎(chǔ)數(shù)據(jù)類型 (NSInteger寿酌,CGFloat)和C數(shù)據(jù)類型(int, float, double, char, 等等)胰苏。

copy:建立一個索引計數(shù)為1的對象,然后釋放舊對象醇疼。對NSString,不能用于NSMutablestring硕并。

retain:釋放舊的對象,將舊對象的值賦予輸入對象秧荆,再提高輸入對象的索引計數(shù)為1倔毙。釋放舊的對象,將舊對象的值賦予輸入對象乙濒,再提高輸入對象的索引計數(shù)為1陕赃。一般是用于字符串(NSString,NSMutableString)颁股,數(shù)組(NSMutableArray凯正,NSArray),字典對象豌蟋,視圖對象(UIView),控制器對象(UIViewController)等(NSObject及其子類)桑滩。

copy與retain的區(qū)別:(轉(zhuǎn))

copy是創(chuàng)建一個新對象梧疲,retain是創(chuàng)建一個指針,引用對象計數(shù)加1运准。Copy屬性表示兩個對象內(nèi)容相同幌氮,新的對象retain為1?,與舊有對象的引用計數(shù)無關(guān)胁澳,舊有對象沒有變化该互。copy減少對象對上下文的依賴。

retain屬性表示兩個對象地址相同(建立一個指針韭畸,指針拷貝)宇智,內(nèi)容當然相同,這個對象的retain值+1也就是說胰丁,retain?是指針拷貝随橘,copy?是內(nèi)容拷貝。

當然在iOS中并不是所有的對象都支持copy锦庸,mutableCopy机蔗,遵守NSCopying 協(xié)議的類可以發(fā)送copy消息,遵守NSMutableCopying 協(xié)議的類才可以發(fā)送mutableCopy消息。假如發(fā)送了一個沒有遵守上訴兩協(xié)議而發(fā)送 copy或者 mutableCopy,那么就會發(fā)生異常萝嘁。但是默認的iOS類并沒有遵守這兩個協(xié)議梆掸。如果想自定義一下copy 那么就必須遵守NSCopying,并且實現(xiàn) copyWithZone: 方法,如果想自定義一下mutableCopy 那么就必須遵守NSMutableCopying,并且實現(xiàn) mutableCopyWithZone: 方法牙言。

strong:與retain類似

weak:與unsafe_unretained類似酸钦,可以避免野指針。

nonatomic:atomic是Objc使用的一種線程保護技術(shù)嬉挡,基本上來講钝鸽,是防止在寫未完成的時候被另外一個線程讀取,造成數(shù)據(jù)錯誤庞钢。而這種機制是耗費系統(tǒng)資源的拔恰,所以在iPhone這種小型設(shè)備上,如果沒有使用多線程間的通訊編程基括,那么nonatomic是一個非常好的選擇颜懊。

3.深拷貝與淺拷貝

找到一篇特別詳細的解釋,地址如下:

IOS開發(fā)之深拷貝與淺拷貝(mutableCopy與Copy)詳解 - iPhone Dev - 博客園

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末风皿,一起剝皮案震驚了整個濱河市河爹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌桐款,老刑警劉巖咸这,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異魔眨,居然都是意外死亡媳维,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門遏暴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來侄刽,“玉大人,你說我怎么就攤上這事朋凉≈莸ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵杂彭,是天一觀的道長墓毒。 經(jīng)常有香客問我,道長盖灸,這世上最難降的妖魔是什么蚁鳖? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮赁炎,結(jié)果婚禮上醉箕,老公的妹妹穿的比我還像新娘钾腺。我一直安慰自己,他們只是感情好讥裤,可當我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布放棒。 她就那樣靜靜地躺著,像睡著了一般己英。 火紅的嫁衣襯著肌膚如雪间螟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天损肛,我揣著相機與錄音厢破,去河邊找鬼。 笑死治拿,一個胖子當著我的面吹牛摩泪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播劫谅,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼见坑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了捏检?” 一聲冷哼從身側(cè)響起荞驴,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎贯城,沒想到半個月后熊楼,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡能犯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年孙蒙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悲雳。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖香追,靈堂內(nèi)的尸體忽然破棺而出合瓢,到底是詐尸還是另有隱情,我是刑警寧澤透典,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布晴楔,位于F島的核電站,受9級特大地震影響峭咒,放射性物質(zhì)發(fā)生泄漏税弃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一凑队、第九天 我趴在偏房一處隱蔽的房頂上張望则果。 院中可真熱鬧,春花似錦、人聲如沸西壮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽款青。三九已至做修,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間抡草,已是汗流浹背饰及。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留康震,地道東北人燎含。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像签杈,于是被迫代替她去往敵國和親瘫镇。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,870評論 2 361

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

  • 為什么很多內(nèi)置類如UITableView的delegate屬性都是assign而不是retain? 所有的引用計數(shù)...
    煙雨平生花飛舞閱讀 1,193評論 0 3
  • 307答姥、setValue:forKey和setObject:forKey的區(qū)別是什么铣除? 答:1, setObjec...
    AlanGe閱讀 1,554評論 0 1
  • iOS面試小貼士 ———————————————回答好下面的足夠了------------------------...
    不言不愛閱讀 1,990評論 0 7
  • 史上最全的iOS面試題及答案 iOS面試小貼士———————————————回答好下面的足夠了----------...
    Style_偉閱讀 2,360評論 0 35
  • 紫羅衫,青玉簪鹦付。 桃花自愧飛滿天尚粘。 秋千舞,笑語歡敲长。 聞得生人郎嫁,直把身掩。 瞞祈噪、瞞泽铛、瞞。 紅燭干辑鲤,意闌珊盔腔。 久坐深...
    你若乘風我相隨閱讀 230評論 0 0