iOS面試回答之OC篇

0碧浊、面向?qū)ο蟮娜筇卣?br> 答:封裝、繼承瘟仿、多態(tài)
封裝:把具體的對象封裝成抽象的類箱锐,隱藏內(nèi)部實(shí)現(xiàn),對象的屬性和實(shí)現(xiàn)細(xì)節(jié)劳较,僅對外公開接口驹止,提高代碼的安全性,實(shí)現(xiàn)模塊化調(diào)用。為元素搞公有私有訪問就是為了隱藏實(shí)現(xiàn)細(xì)節(jié)观蜗,只露一個干凈的接口臊恋,讓業(yè)務(wù)邏輯不被實(shí)現(xiàn)細(xì)節(jié)所污染,即所謂的封裝
好處:1.使用者只關(guān)注接口而不必關(guān)注實(shí)現(xiàn)墓捻,在使用第三方框架的時(shí)候抖仅。2.代碼的維護(hù)性好

繼承:描述類與類的關(guān)系,一個類是另外一個類的子類砖第,子類可以復(fù)用父類的方法和屬性
子類繼承父類就會擁有父類所有的屬性和方法
如果對于方法不滿意可以重寫父類的方法
缺點(diǎn):1.使程序變得復(fù)雜2.破壞了封裝性3.降低了可維護(hù)性和可擴(kuò)展性

多態(tài):引用的多種形態(tài)撤卢,Polymorphism,父類指針指向子類對象,子類可以重寫父類的方法。Animal子類有cat,dog,雖然都有Eat方法梧兼,但是父類不能用子類的方法放吩,子類的方法可能各有不同。不同對象以自己的方式響應(yīng)相同的消息的能力叫做多態(tài)羽杰。

1渡紫、Objective-C的類可以多重繼承么?可以采用多個協(xié)議么忽洛?
答:不可以多重繼承腻惠,只有Java這個變態(tài)可以多繼承.oc中所有的類都是NSObject 的子類,可以用代理來代替多繼承的功能
可以遵守多個協(xié)議,用逗號隔開<NSCoding,NSCoping>欲虚。

2、#import和#include的區(qū)別是什么悔雹?#import<> 跟 #import""有什么區(qū)別复哆?
答:#include是C/C++中的,OC中要用#import避免頭文件被重復(fù)包含的問題腌零。比如class A梯找,class B都引用了class C,class D若引用class A與class B益涧,就會報(bào)頭文件重復(fù)引用錯誤锈锤,如果非要用#import,要加上#define if的預(yù)編譯指令剔除重復(fù)的頭文件。在OC就乖乖用#import
#import<> 導(dǎo)入系統(tǒng)頭文件久免, #import""自己的頭文件

3浅辙、Category是什么?
答:
Category是分類阎姥,就是用來增強(qiáng)一個類的能力记舆。
比如在開發(fā)中frame這樣的結(jié)構(gòu)體不可以直接修改屬性,可以自己寫個Category呼巴,UIView+Extension,在h里定義泽腮,在m里實(shí)現(xiàn)一些方法這樣就可以導(dǎo)入頭文件,直接可以修改屬性了衣赶。當(dāng)然系統(tǒng)的類和自定義的類都可以寫分類诊赊。
所以說Category就是可以在不用知曉一個類的具體內(nèi)容,不改變原來代碼的情況下,給它添加一些方法府瞄『荔荩可以覆蓋但不能修改或刪除方法
可以將類的實(shí)現(xiàn)分散到多個不同文件或多個不同框架中
在分類中可以定義屬性,實(shí)例變量摘能,是公開的啦

4续崖、 Extension是什么?
Extension是擴(kuò)展团搞,擴(kuò)展是分類的一種特殊的形式严望,是沒有名字的私有的分類。
比如我們在UIViewController里@interface和@end之間寫的東西就是擴(kuò)展啦逻恐。
@interface TRCat ()//沒有分類名了
@property (nonatomic,strong)NSString* name;//此處聲明屬性
-(void)fly;//此處聲明方法
@end
其實(shí)簡言之像吻,擴(kuò)展就是用來聲明私有的屬性和方法,如果獨(dú)立聲明的話只有h文件沒有m文件复隆,甚至像上面那樣的不用獨(dú)立的文件都可以拨匆!

5、Protocol是什么挽拂?
Protocol是協(xié)議惭每,只有.h文件,甚至可以不獨(dú)立文件
使用時(shí) 遵守協(xié)議亏栈,在本類中實(shí)現(xiàn)方法就可以
協(xié)議有required和optional的台腥,required是必須實(shí)現(xiàn)的協(xié)議方法。

6绒北、繼承是什么黎侈?擴(kuò)展一個類的方式用繼承好還是分類好?為什么闷游?
繼承是用來描述類與類之間的關(guān)系的峻汉。子類繼承于父類贴汪,擁有父類的屬性和方法。
擴(kuò)展一個類用Category好休吠。繼承會破壞程序的封裝性扳埂。

7、類實(shí)例(成員)變量的@protected,@private,@public聲明各有什么含義蛛碌?
答:@protected是受保護(hù)的聂喇,只能在本類及其子類中訪問
@private是私有的,只能在本類訪問
@public公開的

8蔚携、淺拷貝和深拷貝區(qū)別
答:平常的EVDog* dog1=dog2這樣的都叫淺拷貝
EVDog* dog1=[dog2 copy]這樣的叫深拷貝
所以淺拷貝只拷貝了地址(指針)并沒有產(chǎn)生新對象希太。而深拷貝產(chǎn)生了新的對象
如果拷貝完后改變原對象的屬性,深拷貝的對象的屬性不變酝蜒,淺拷貝的對象屬性會變化

9誊辉、屬性readwrite,readonly亡脑,assign堕澄,retain,copy霉咨,nonatomic 各是什么作用
答:assign用于簡單數(shù)據(jù)類型蛙紫,如NSInteger,double,bool,
retain和copy用于對象,
readwrite是可讀可寫特性途戒;需要生成getter方法和setter方法時(shí)
readonly是只讀特性 只會生成getter方法 不會生成setter方法 ;不希望屬性在類外改變

assign是賦值特性坑傅,setter方法將傳入?yún)?shù)賦值給實(shí)例變量;僅設(shè)置變量時(shí)喷斋;
retain表示持有特性唁毒,setter方法將傳入?yún)?shù)先保留,再賦值星爪,傳入?yún)?shù)的retaincount會+1;
copy表示賦值特性浆西,setter方法將傳入對象復(fù)制一份;需要一份新的變量時(shí)顽腾。
nonatomic非原子操作近零,atomic原子性操作。原子性指的是一個操作不可以被中途cpu暫停然后調(diào)度, 即不能被中斷, 要不就執(zhí)行完, 要不就不執(zhí)行崔泵,就是為了多線程安全的秒赤。
一般使用nonatomic。

10憎瘸、@class的作用
答:告訴編譯器有這么個類
在.h文件中, 一般只需要知道被引用的類的名稱就可以了陈瘦。 不需要知道其內(nèi)部的實(shí)體變量和方法幌甘,所以在頭文件中一般使用@class來聲明這個名稱是類的名稱。 而在實(shí)現(xiàn)類里面,因?yàn)闀玫竭@個引用類的內(nèi)部的實(shí)體變量和方法锅风,所以需要使用#import來包含這個被引用類的頭文件酥诽。
@class還可以解決循環(huán)依賴的問題,例如A.h導(dǎo)入了B.h皱埠,而B.h導(dǎo)入了A.h肮帐,每一個頭文件的編譯都要讓對象先編譯成功才行

11、id 聲明的對象有什么特性边器?
答:id類型的對象可以是任意類型的OC對象训枢,與C中的void*萬能指針相似。具有運(yùn)行時(shí)的特點(diǎn)忘巧,在程序運(yùn)行時(shí)才確定對象的類型恒界。

12、frame和bounds有什么不同砚嘴?
答:frame是在父視圖坐標(biāo)系下的位置和大小十酣。bounds是自身坐標(biāo)系下的位置和大小。
frame以父控件的左上角為坐標(biāo)原點(diǎn)际长,bounds以控件本身的左上角為坐標(biāo)原點(diǎn)

13详瑞、方法和選擇器有何不同樊展?
答:selector是方法的名字,通過它可以找到方法
方法是相對于對象來說的,包含名字和實(shí)現(xiàn)等元莫。

14、lazy loading是什么
答:懶加載弄屡。直到要用的時(shí)候才去初始化昼浦。

15、是否可以在一個視圖控制器中嵌入兩個tableview控制器竭沫?(Can we use two tableview controllers on one viewcontroller?)
答:可以燥翅。
如果是視圖的話,一個視圖下當(dāng)然可以有兩個tableView
如果是控制器的話蜕提,tabBarController下就可以有兩個呀

16森书、一個tableView是否可以關(guān)聯(lián)兩個不同的數(shù)據(jù)源?你會怎么處理谎势?(Can we use one tableview with two different datasources? How you will achieve this?)
答:不明白凛膏。tableView的dataSource就是控制器啊,應(yīng)該不能兩個吧脏榆?沒有意義

17猖毫、什么是KVO?什么是KVC
答:KVC:key-value-coding。鍵值編碼须喂。提供一種機(jī)制吁断,直接通過字符串來標(biāo)識對象的屬性趁蕊。可以用valueForKeyPath/setValue forKeyPath等來訪問(讀取或設(shè)置)對象的屬性仔役,而不是通過setter,getter方法掷伙。可以簡化程序代碼

KVO是基于KVC的又兵。Key-value-observer 鍵值觀察者任柜。注冊成為觀察者后,可以動態(tài)地監(jiān)控對象屬性的變化沛厨。發(fā)生變化時(shí)可以收到通知宙地。

18、Delegate的作用
答:代理是回調(diào)監(jiān)聽機(jī)制的一種俄烁,一個類做不了的事就交給其他類來做绸栅。
比如actionSheet本身是沒辦法處理用戶交互事件的,所以要讓控制器成為其代理來處理页屠。當(dāng)控制器遵守協(xié)議粹胯,實(shí)現(xiàn)方法,成為它的代理之后辰企,就可以在特定的時(shí)間通知控制器進(jìn)行處理风纠,所以delegate方法里經(jīng)常有did,should,will這樣的詞。
要注意Delegate的聲明一定要是weak的牢贸,以避免循環(huán)引用內(nèi)存泄漏

19竹观、oc中可修改和不可以修改類型(What are mutable and immutable types in Objective C?)
答:可修改不可修改類。OC中的可變不可變類型
比如NSArray和NSMutableArray,NSDictionary和NSMutableDictionary能否動態(tài)添加和修改內(nèi)容潜索。前者在初始化后的內(nèi)存控件就是固定不可變的臭增,后者可以添加等,可以動態(tài)申請新的內(nèi)存空間竹习。

20誊抛、runtime是什么?
答:運(yùn)行時(shí)是指在程序運(yùn)行時(shí)才確定數(shù)據(jù)的類型整陌,調(diào)用指定的方法拗窃。將數(shù)據(jù)類型的確定由編譯時(shí)推遲到了程序運(yùn)行時(shí)∶诒瑁可以通過字符串來創(chuàng)建對象NSClassFromString随夸,創(chuàng)建方法,創(chuàng)建屬性NSSelectorFromString

21震放、method和selector的區(qū)別宾毒?
答:方法和選擇器的區(qū)別
selector是方法的名字,通過它可以找到方法
方法是相對于對象來說的殿遂,包含名字和實(shí)現(xiàn)等伍俘。

22邪锌、寫一個委托的interface
答:先寫個協(xié)議:
1.聲明一個協(xié)議(只有.h文件)

import <Foundation/Foundation.h>

@protocal 協(xié)議名superMan<父協(xié)議NSObject>
@property NSString* name;
-(void)method;
@end
2.使一個類遵守協(xié)議
@interface TRMan:NSObject<superMan>
多個協(xié)議要用勉躺,隔開
3.使用協(xié)議
id<協(xié)議名superMan> obj=[[TRMan alloc]init];
@ protocol MyDelegate
@interface MyClass : NSObject
@property(nonatomic,weak)id<TRPassValue> delegate;
@end

協(xié)議也可以沒有獨(dú)立文件癌瘾,寫在類里

import <UIKit/UIKit.h>

@class MyClass;
@protocol MyClassDelegate <NSObject>
-(void)protocolMethod;
@end
@interface MyClass : NSObject
@property(nonatomic,weak)id<MyClassDelegate> delegate;
@end

23、寫個單例
利用GCD構(gòu)建
DataCenter.h

import <Foundation/Foundation.h>

@interface DataCenter : NSObject
+(id)sharedDataCenter;
@end

DataCenter.m

import "DataCenter.h"

@implementation DataCenter
+(id)sharedDataCenter{
static DataCenter *sharedDataCenter=nil;
static dispatch_once_t token;
dispatch_once(&token, ^{
sharedDataCenter = [[self alloc]init];
});
return sharedDataCenter;
}
@end

24饵溅、const/static/extern的作用

————————————————————————————————————————————————————————

通知NSNotification和協(xié)議protocol的區(qū)別

17.NSOperation queue?
答案:存放NSOperation的集合類妨退。操作和操作隊(duì)列,用于處理ios多線程開發(fā)
操作和操作隊(duì)列蜕企,基本可以看成java中的線程和線程池的概念咬荷。用于處理ios多線程開發(fā)的問題。
網(wǎng)上部分資料提到一點(diǎn)是轻掩,雖然是queue幸乒,但是卻并不是帶有隊(duì)列的概念,放入的操作并非是按照嚴(yán)格的先進(jìn)現(xiàn)出唇牧。
這邊又有個疑點(diǎn)是罕扎,對于隊(duì)列來說,先進(jìn)先出的概念是Afunc添加進(jìn)隊(duì)列丐重,Bfunc緊跟著也進(jìn)入隊(duì)列腔召,Afunc先執(zhí)行這個是必然的,
但是Bfunc是等Afunc完全操作完以后扮惦,B才開始啟動并且執(zhí)行臀蛛,因此隊(duì)列的概念離亂上有點(diǎn)違背了多線程處理這個概念。
但是轉(zhuǎn)念一想其實(shí)可以參考銀行的取票和叫號系統(tǒng)崖蜜。
因此對于A比B先排隊(duì)取票但是B率先執(zhí)行完操作浊仆,我們亦然可以感性認(rèn)為這還是一個隊(duì)列。
但是后來看到一票關(guān)于這操作隊(duì)列話題的文章豫领,其中有一句提到
“因?yàn)閮蓚€操作提交的時(shí)間間隔很近抡柿,線程池中的線程,誰先啟動是不定的氏堤∩尘”
瞬間覺得這個queue名字有點(diǎn)忽悠人了,還不如pool~
綜合一點(diǎn)鼠锈,我們知道他可以比較大的用處在于可以幫組多線程編程就好了闪檬。

  1. 說說響應(yīng)鏈(What is responder chain?)
  2. 什么是推送消息?(What is push notification?)

什么是接口
可以調(diào)用的屬性方法

10购笆、試寫出 @property中帶retain和assign關(guān)鍵字粗悯,通過@synthesize自動生成的的合成存取方法(set、get方法)的實(shí)現(xiàn)代碼
@property(nonatomic,retain)EVDog* dog;
@property(nonatomic,assign)EVCat cat;

iOS中有哪些回調(diào)機(jī)制同欠,并作簡單的比較.
target: action:
delegate
通知:notification
觀察者模式:
block:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末样傍,一起剝皮案震驚了整個濱河市横缔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌衫哥,老刑警劉巖茎刚,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異撤逢,居然都是意外死亡膛锭,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門蚊荣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來初狰,“玉大人,你說我怎么就攤上這事互例∩萑耄” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵媳叨,是天一觀的道長腥光。 經(jīng)常有香客問我,道長肩杈,這世上最難降的妖魔是什么柴我? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮扩然,結(jié)果婚禮上艘儒,老公的妹妹穿的比我還像新娘。我一直安慰自己夫偶,他們只是感情好界睁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著兵拢,像睡著了一般翻斟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上说铃,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天访惜,我揣著相機(jī)與錄音,去河邊找鬼腻扇。 笑死债热,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的幼苛。 我是一名探鬼主播窒篱,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了墙杯?” 一聲冷哼從身側(cè)響起配并,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎高镐,沒想到半個月后溉旋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡避消,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年低滩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岩喷。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖监憎,靈堂內(nèi)的尸體忽然破棺而出纱意,到底是詐尸還是另有隱情,我是刑警寧澤鲸阔,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布偷霉,位于F島的核電站,受9級特大地震影響褐筛,放射性物質(zhì)發(fā)生泄漏类少。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一渔扎、第九天 我趴在偏房一處隱蔽的房頂上張望硫狞。 院中可真熱鬧,春花似錦晃痴、人聲如沸残吩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泣侮。三九已至,卻和暖如春紧唱,著一層夾襖步出監(jiān)牢的瞬間活尊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工漏益, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛹锰,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓遭庶,卻偏偏與公主長得像宁仔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子峦睡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

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

  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,139評論 30 470
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理翎苫,服務(wù)發(fā)現(xiàn)权埠,斷路器,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法煎谍,類相關(guān)的語法攘蔽,內(nèi)部類的語法,繼承相關(guān)的語法呐粘,異常的語法满俗,線程的語...
    子非魚_t_閱讀 31,630評論 18 399
  • 1.項(xiàng)目經(jīng)驗(yàn) 2.基礎(chǔ)問題 3.指南認(rèn)識 4.解決思路 ios開發(fā)三大塊: 1.Oc基礎(chǔ) 2.CocoaTouch...
    陽光的大男孩兒閱讀 4,986評論 0 13
  • 1 兩周前唆垃,我在一個微信群里,認(rèn)識了一個新姑娘痘儡。她大二辕万,坐標(biāo)帝都。 那天晚上沉删,群里本來靜悄悄的渐尿,九點(diǎn)那會,她毫無征...
    許小冰閱讀 382評論 1 4