iOS 面試 - Objective-C

1.oc可以多繼承嗎?可以實(shí)現(xiàn)多個接口嗎适室?Category是什么?重新寫一個類的方式用繼承好還是分類好举瑰?為什么捣辆?

OC不能多繼承;可實(shí)現(xiàn)多個接口此迅,通過多個接口可以完成類似C++的多重繼承汽畴;Category是類別;一般情況用分類好邮屁,用Category去重寫類的方法整袁,僅對本Category有效,不會影響到其他類與原有類的關(guān)系佑吝。

2.#import 跟#include 又什么區(qū)別坐昙,@class呢, #import<> 跟 #import””又什么區(qū)別?

#import是Objective-C的導(dǎo)入頭文件的關(guān)鍵字,#include是C/C++的頭文件導(dǎo)入的關(guān)鍵字芋忿。使用#import只會導(dǎo)入一次炸客,不會重復(fù)導(dǎo)入,相當(dāng)于#include#pragma once戈钢;
@class告訴編譯器某個類的聲明痹仙,當(dāng)執(zhí)行時,采取查看累的實(shí)現(xiàn)文件殉了,可以解決頭文件的相互包含开仰;
#import<> 用來包含系統(tǒng)的頭文件,#import “”用來包含用戶的頭文件薪铜。

  1. 屬性readwrite众弓,readonly,assign隔箍,retain谓娃,copy,nonatomic 各是什么作用蜒滩,在那種情況下用?

1)readwrite:可讀可寫滨达,需要生成getter和setter方法時
2)readonly: 只讀特性,只會生成getter方法俯艰,不會生成setter方法捡遍;不希望屬性在類外改變

  1. assign :賦值特性,setter方法傳入?yún)?shù)賦值給實(shí)例變量竹握;僅設(shè)置變量時稽莉;
    4)retain:持有特性,setter方法將傳入?yún)?shù)先保留涩搓,再賦值污秆,傳入?yún)?shù)的retainCount會 +1
  2. copy表示賦值特性,setter方法將傳入對象賦值一份昧甘;需要完全一份新的變量時良拼。
    6)nonatomic:非原子操作,決定編譯器生成的setter getter是否是原子操作充边,atomic表示多線程安全庸推,一般使用nonatomic
    注意:atomic原子操作,setter和getter是安全的話浇冰,就不必

4.寫一個setter方法用于完成@property (nonatomic,retain)NSString *name,寫一個setter方法用于完成@property(nonatomic贬媒,copy)NSString *name

- (void)setName:(NSString*) str
{
[str retain];
[name release];
name = str;
}
-?(void)setName:(NSString?*)str
{
id t = [str copy];
[name release];
name = t;
}

5.對于語句NSString*obj = [[NSData alloc] init]; obj在編譯時和運(yùn)行時分別時什么類型的對象?

編譯的時候是NSString 類型的對象,運(yùn)行時候是NSData類型的對象

6.常見的object-c的數(shù)據(jù)類型有那些肘习, 和C的基本數(shù)據(jù)類型有什么區(qū)別?如:NSInteger和int

object-c的數(shù)據(jù)類型有NSString际乘,NSNumber,NSArray漂佩,NSMutableArray脖含,NSData等等。這些都是class投蝉。

創(chuàng)建后便是對象养葵,而C語言的基本數(shù)據(jù)類型int,只是一定字節(jié)的內(nèi)存空間瘩缆,用于存放數(shù)值;

NSInteger是基本數(shù)據(jù)類型关拒,并不是NSNumber的子類,當(dāng)然也不是NSObject的子類庸娱。

NSInteger是基本數(shù)據(jù)類型Int或者Long的別名(NSInteger的定義typedef long NSInteger)着绊,它的區(qū)別在于,NSInteger會根據(jù)系統(tǒng)是32位還是64位來決定是本身是int還是Long涌韩。

7.id 聲明的對象有什么特性?

id 聲明的對象具有運(yùn)行時的特性畔柔,即可以指向任意類型的objective-c的對象。

8.Objective-C如何對內(nèi)存管理的,說說你的看法和解決方法?

Objective-C的內(nèi)存管理主要有三種方式ARC(自動內(nèi)存計(jì)數(shù))臣樱、手動內(nèi)存計(jì)數(shù)(MRC)靶擦、內(nèi)存池。

1). (Garbage Collection)自動內(nèi)存計(jì)數(shù):這種方式和java類似雇毫,在你的程序的執(zhí)行過程中玄捕。

解決: 通過alloc – initial方式創(chuàng)建的, 創(chuàng)建后引用計(jì)數(shù)+1, 此后每retain一次引用計(jì)數(shù)+1, 那么在程序中做相應(yīng)次數(shù)的release就好了.

2) (Reference Counted)手動內(nèi)存計(jì)數(shù):就是說,從一段內(nèi)存被申請之后棚放,就存在一個變量用于保存這段內(nèi)存被使用的次數(shù)枚粘,我們暫時把它稱為計(jì)數(shù)器,當(dāng)計(jì)數(shù)器變?yōu)?的時候飘蚯,那么就是釋放這段內(nèi)存的時候馍迄。

解決:一般是由類的靜態(tài)方法創(chuàng)建的, 函數(shù)名中不會出現(xiàn)alloc或init字樣, 如[NSString string]和[NSArray arrayWithObject:], 創(chuàng)建后引用計(jì)數(shù)+0, 在函數(shù)出棧后釋放, 即相當(dāng)于一個棧上的局部變量. 當(dāng)然也可以通過retain延長對象的生存期.

3). (NSAutoRealeasePool)內(nèi)存池:可以通過創(chuàng)建和釋放內(nèi)存池控制內(nèi)存申請和回收的時機(jī).

NSAutoRealeasePool: 內(nèi)存池福也。

由autorelease加入系統(tǒng)內(nèi)存池,內(nèi)存池是可以嵌套的攀圈,每個內(nèi)存池都需要有一個創(chuàng)建釋放對象暴凑,就像main函數(shù)中寫的一樣。使用也很簡單赘来,比如:[[[NSString alloc]initialWithFormat:@”Hey you!”] autorelease],就將一個NSString 對象加入到最內(nèi)層的系統(tǒng)內(nèi)存池现喳,當(dāng)我們釋放這個內(nèi)存池時候,其中的對象都會被釋放犬辰。

  1. 原子(atomic)跟非原子(non-atomic)屬性有什么區(qū)別?

1)atomic提供多線程安全嗦篱。是防止在寫未完成的時候被另外一個線程讀取,造成數(shù)據(jù)錯誤幌缝。

2). non-atomic:在自己管理內(nèi)存的環(huán)境中灸促,解析的訪問器保留并自動釋放返回的值,如果指定了 nonatomic 狮腿,那么訪問器只是簡單地返回這個值腿宰。

NSMutableArray* ary = [[NSMutableArray array] retain];  //
NSString *str = [NSString stringWithFormat:@"test"]; // +1
[str retain];  // +1
[aryaddObject:str];  // +1
NSLog(@”%@%d”,str,[str retainCount]);
[str retain]; // +1
[str release]; // -1
[str release]; // -1
NSLog(@”%@%d”,str,[str retainCount]);
[aryremoveAllObjects]; // -1
NSLog(@”%@%d”,str,[str retainCount]);
  1. 內(nèi)存管理的幾條原則時什么?按照默認(rèn)法則.那些關(guān)鍵字生成的對象需要手動釋放?在和property結(jié)合的時候怎樣有效的避免內(nèi)存泄露?

內(nèi)存管理原則:誰申請,誰釋放。

遵循Cocoa Touch的使用原則;

內(nèi)存管理主要避免:過早釋放和內(nèi)存泄漏缘厢。

對于過早釋放:需要注意@property設(shè)置特性時吃度,一定要用對特性相關(guān)的關(guān)鍵字。

對于內(nèi)存釋放:一定要申請了要負(fù)責(zé)釋放贴硫,一定要細(xì)心椿每。

關(guān)鍵字:allocnew生成的對象需要手動釋放;

設(shè)置正確的property屬性英遭,對于retain需要在合適的地方釋放间护。

12.如果測試iOS設(shè)備的性能?

Profile-> Instrument -> Time Profier

Profile是側(cè)面挖诸,輪廓的意思汁尺。

13.OC創(chuàng)建線程的方法是什么?如果在主線程中執(zhí)行代碼多律,方法是什么痴突?如果想延時執(zhí)行代碼,方法又是什么狼荞?

創(chuàng)建方式:NSThread, GCD的dispatch,使用子類化的NSOperation.然后將其加入NSOperationQueue辽装;在主線程中執(zhí)行代碼,方法是performSelectorOnMainThread,如果想延時執(zhí)行代碼可以用performSelector:onThread:withObject:waitUniilDone

15.淺談設(shè)計(jì)模式

設(shè)計(jì)模式并不是一種新技術(shù)相味,而是一種編碼經(jīng)驗(yàn)拾积,使用比如Java中的接口,iOS中的協(xié)議,繼承關(guān)系等基本手段拓巧。用比較成熟的邏輯去處理某一類型的事情斯碌,總結(jié)為所有設(shè)計(jì)模式。面向?qū)ο缶幊讨辛嵯琂ava已經(jīng)歸納了23中設(shè)計(jì)模式输拇。

  1. MVC設(shè)計(jì)模式:模型,視圖贤斜,控制器,可以將整個應(yīng)用程序在思想上分成三大塊逛裤,對應(yīng)是的數(shù)據(jù)的存儲或處理瘩绒,前臺的顯示,業(yè)務(wù)邏輯的控制带族。 iOS本身的設(shè)計(jì)思想就是遵循mvc設(shè)計(jì)模式锁荔。其不屬于23種設(shè)計(jì)模式范疇。

  2. 代理模式:代理模式給某一個對象提供一個代理對象蝙砌,并由代理對象控制對源對象的引用.比如一個工廠生產(chǎn)了產(chǎn)品阳堕,并不想直接賣給用戶,而是搞了很多代理商择克,用戶可以直接找代理商買東西恬总,代理商從工廠進(jìn)貨.常見的如QQ的自動回復(fù)就屬于代理攔截,代理模式在iphone中得到廣泛應(yīng)用.

  3. 單例模式:說白了就是一個類不通過alloc方式創(chuàng)建對象肚邢,而是用一個靜態(tài)方法返回這個類的對象壹堰。系統(tǒng)只需要擁有一個的全局對象,這樣有利于我們協(xié)調(diào)系統(tǒng)整體的行為骡湖,比如想獲得[UIApplication sharedApplication];任何地方調(diào)用都可以得到 UIApplication的對象贱纠,這個對象是全局唯一的。

  4. 觀察者模式: 當(dāng)一個物體發(fā)生變化時响蕴,會通知所有觀察這個物體的觀察者讓其做出反應(yīng)谆焊。實(shí)現(xiàn)起來無非就是把所有觀察者的對象給這個物體,當(dāng)這個物體的發(fā)生改變浦夷,就會調(diào)用遍歷所有觀察者的對象調(diào)用觀察者的方法從而達(dá)到通知觀察者的目的辖试。

  5. 工廠模式

public class Factory{
    public static Sample creator(int which){
    if (which==1)
        return new SampleA();
    else if (which==2)
        return new SampleB();
    }
}

15 淺復(fù)制和深復(fù)制的區(qū)別?

淺層復(fù)制:只復(fù)制指向?qū)ο蟮闹羔槪粡?fù)制引用對象本身军拟。
深層復(fù)制:復(fù)制引用對象本身剃执。

淺復(fù)制好比你和你的影子,你完蛋懈息,你的影子也完蛋
深復(fù)制好比你和你的克隆人肾档,你完蛋,你的克隆人還活著。

  1. 類別的作用?繼承和類別在實(shí)現(xiàn)中有何區(qū)別?

Category:類別怒见,可以在不獲悉俗慈,不改變原來代碼的情況下往里面添加新的方法,只能添加遣耍,不能刪除修改闺阱,并且如果類別和原來類中的方法產(chǎn)生名稱沖突,則類別將覆蓋原來的方法舵变,因?yàn)轭悇e具有更高的優(yōu)先級酣溃。

Category三個主要作用:
1)將類的實(shí)現(xiàn)分散到多個不同文件夾或者多個不同框架中。
2)創(chuàng)建私有方法的前向引用纪隙。
3)向?qū)ο筇砑臃钦絽f(xié)議赊豌。
集成可以增加,修改或者刪除方法绵咱,并且可以增加屬性碘饼。

  1. 類別和類擴(kuò)展的區(qū)別。

category和extensions的不同在于 后者可以添加屬性悲伶。另外后者添加的方法是必須要實(shí)現(xiàn)的艾恼。

extensions可以認(rèn)為是一個私有的Category。

  1. oc中的協(xié)議和java中的接口概念有何不同?

OC的協(xié)議有: “必須實(shí)現(xiàn)(@requied)”和“可選實(shí)現(xiàn)(@optional)”麸锉。

  1. 什么是KVO和KVC?

KVC: 鍵值編碼钠绍,是一種間接訪問對象的屬性使用字符串來標(biāo)識屬性,而不是通過調(diào)用存取方法淮椰,直接或通過實(shí)例變量來訪問的機(jī)制五慈。
KVO:簡直觀察機(jī)制,提供了觀察某一屬性變化的方法主穗,極大的簡化了代碼泻拦。

  1. 代理的作用?

代理的目的是改變或傳遞控制鏈。允許一個類在某些特定時刻通知到其他類忽媒,而不需要獲取到那些類的指針争拐。可以減少框架復(fù)雜度晦雨。

另外一點(diǎn)架曹,代理可以理解為java中的回調(diào)監(jiān)聽機(jī)制的一種類似。

  1. oc中可修改和不可以修改類型闹瞧。

比如NSArray和NSMutableArray绑雄。前者在初始化后的內(nèi)存空間就是固定不可變的,后者可以添加等奥邮,可以動態(tài)申請新的內(nèi)存空間万牺。

  1. 我們說的oc是動態(tài)運(yùn)行時語言是什么意思?

多態(tài):主要是將數(shù)據(jù)類型的確定由編譯時罗珍,推遲到了運(yùn)行時。
運(yùn)行時機(jī)制是多態(tài)的基礎(chǔ)脚粟。

  1. 通知和協(xié)議的不同之處?

協(xié)議有控制鏈的關(guān)系覆旱,通知沒有。

  1. 什么是推送消息?

推送通知更是一種技術(shù)核无。是客戶端獲取資源的一種手段扣唱。
普通情況下,客戶端獲取資源:都是客戶端主動的pull团南。
推送則是服務(wù)器主動push噪沙。

  1. 關(guān)于多態(tài)性。

多態(tài)已慢,指的是子類指針可以賦值給父類曲聂。

26.關(guān)于單例。

  1. 說說響應(yīng)鏈佑惠。

事件響應(yīng)鏈。包括點(diǎn)擊事件齐疙,畫面刷新事件等膜楷。在視圖棧內(nèi)從上到下,或者從下到上傳播贞奋《奶可以說點(diǎn)事件的分發(fā),傳遞以及處理轿塔。具體可以去看touch事件特愿。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市勾缭,隨后出現(xiàn)的幾起案子揍障,更是在濱河造成了極大的恐慌,老刑警劉巖俩由,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毒嫡,死亡現(xiàn)場離奇詭異,居然都是意外死亡幻梯,警方通過查閱死者的電腦和手機(jī)兜畸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碘梢,“玉大人咬摇,你說我怎么就攤上這事∩饭” “怎么了肛鹏?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵逸邦,是天一觀的道長。 經(jīng)常有香客問我龄坪,道長昭雌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任健田,我火速辦了婚禮烛卧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘妓局。我一直安慰自己总放,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布好爬。 她就那樣靜靜地躺著局雄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪存炮。 梳的紋絲不亂的頭發(fā)上炬搭,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機(jī)與錄音穆桂,去河邊找鬼宫盔。 笑死,一個胖子當(dāng)著我的面吹牛享完,可吹牛的內(nèi)容都是我干的灼芭。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼般又,長吁一口氣:“原來是場噩夢啊……” “哼彼绷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起茴迁,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤寄悯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后笋熬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體热某,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年胳螟,在試婚紗的時候發(fā)現(xiàn)自己被綠了昔馋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡糖耸,死狀恐怖秘遏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嘉竟,我是刑警寧澤邦危,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布洋侨,位于F島的核電站,受9級特大地震影響倦蚪,放射性物質(zhì)發(fā)生泄漏希坚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一陵且、第九天 我趴在偏房一處隱蔽的房頂上張望裁僧。 院中可真熱鬧,春花似錦慕购、人聲如沸聊疲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽获洲。三九已至,卻和暖如春殿如,著一層夾襖步出監(jiān)牢的瞬間贡珊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工涉馁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留飞崖,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓谨胞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蒜鸡。 傳聞我的和親對象是個殘疾皇子胯努,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

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

  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,125評論 29 470
  • iOS面試題及答案 1. Object-c的類可以多重繼承么?可以實(shí)現(xiàn)多個接口么?Category是什么?重寫一...
    iOS_阿輝閱讀 1,905評論 0 32
  • 1、簡述你項(xiàng)目中常用的設(shè)計(jì)模式逢防。它們有什么優(yōu)缺點(diǎn)叶沛?常用的設(shè)計(jì)模式有:代理、觀察者忘朝、單例灰署。(1)單例:它是用來限制一...
    LZM輪回閱讀 1,014評論 0 6
  • 轉(zhuǎn):http://www.cocoachina.com/programmer/20151019/13746.htm...
    Style_偉閱讀 1,293評論 0 3
  • 不久前曾在公司飯廳內(nèi)閑聊,有位同事說及令他十分尷尬的事局嘁,也問我們曾經(jīng)歷過的尷尬的事溉箕,令我想起記憶中已經(jīng)模糊的一件事...
    墨跡生香閱讀 334評論 0 0