ios面試題

1.自定義一個(gè)delegate

代理的作用:完成委托方交給的任務(wù),委托方有一些任務(wù)自己不想完成,但是還需要要實(shí)現(xiàn),則將該任務(wù)存放到協(xié)議中,由代理完成.但是代理并不會(huì)主動(dòng)的執(zhí)行任務(wù),需要委托方通知代理.

定義協(xié)議(協(xié)議中存放代理的任務(wù))

@class delegateView

@protocolViewDelegate

-?(void)handleTouchEvent(DelegateView *)aView明未;

2.定義代理屬性辜贵,用來存儲(chǔ)代理屬性

@interface DelegateView :UIView

定義代理屬性葛虐,需要遵守上面自定義的協(xié)議

@property(nonamtic,assign)id<DelegateViewDelegate>delegate;

@end

@interface DelegateViewController()<DelegateViewDelegate>服從協(xié)議

為DelegateView指定代理對(duì)象.(找個(gè)代理干活),例如:我們定義一個(gè)紅色視圖(要求點(diǎn)擊時(shí)改變自身視圖顏色),然后為它指定一個(gè)代理對(duì)象self(由于定義的視圖在視圖控制器中),當(dāng)前的self就是視圖控制器類.指定它為代理.有什么活讓它干.

DelegateView *redView=[DelegateView alloc]initWithFrame:CGRectMake(30,30,300,300)];

readView.delegate=self;

self.view addSubview;redView


代理類實(shí)現(xiàn)協(xié)議中的方法.在這只實(shí)現(xiàn)了一個(gè)必須實(shí)現(xiàn)的方法

// 處理觸摸開始時(shí)的響應(yīng)事件

-(void)handleTouchBegan:(DelegateView *)aView{

aView.backgroundColor=[UIColor redColor];

}

@end

請(qǐng)概括一下Core Audio,Core Data以及Core Location各是什么。它們對(duì)iOS應(yīng)用有何意義疫粥?

Core Audio 是iOS和 MAC 的關(guān)于數(shù)字音頻處理的基礎(chǔ),它提供應(yīng)用程序用來處理音頻的一組軟件框架腰懂,所有關(guān)于IOS音頻開發(fā)的接口都是由Core Audio來提供或者經(jīng)過它提供的接口來進(jìn)行封裝的梗逮,按照官方的說法是集播放、音頻處理绣溜、錄制為一體的專業(yè)技術(shù)慷彤,通過它我們的程序可以同時(shí)錄制,播放一個(gè)或者多個(gè)音頻流,自動(dòng)適應(yīng)耳機(jī)底哗,藍(lán)牙耳機(jī)等硬件岁诉,響應(yīng)各種電話中斷,靜音跋选,震動(dòng)等涕癣,甚至提供3D效果的音樂播放。

Core Data框架提供了對(duì)象-關(guān)系映射(ORM)的功能野建,即能夠?qū)C對(duì)象轉(zhuǎn)化成數(shù)據(jù)属划,保存在SQLite3數(shù)據(jù)庫(kù)文件中,也能夠?qū)⒈4嬖跀?shù)據(jù)庫(kù)中的數(shù)據(jù)還原成OC對(duì)象候生。

在此數(shù)據(jù)操作期間同眯,不需要編寫任何SQL語句。使用此功能唯鸭,要添加CoreData.framework和導(dǎo)入主頭文件

Core Location Framework的用途是使用戶通過移動(dòng)設(shè)備來獲取定位信息和方向信息须蜗,還有你的范圍,當(dāng)用戶走過某些范圍邊界就能馬上監(jiān)控到目溉,在iOS上明肮,甚至可以連同beacon聯(lián)動(dòng)來確定周邊信息。

IOS-Socket和http連接的區(qū)別

Socket連接:socket連接就是所謂的長(zhǎng)連接缭付,理論上客戶端和服務(wù)器端一旦建立起連接將不會(huì)主動(dòng)斷開柿估;但是由于各種環(huán)境因素可能會(huì)是連接斷開,比如說:服務(wù)器端和客戶端主機(jī)down了陷猫,網(wǎng)絡(luò)故障秫舌,或者兩者之間長(zhǎng)時(shí)間沒有數(shù)據(jù)傳輸,網(wǎng)絡(luò)防火墻可能會(huì)斷開該連接以釋放網(wǎng)絡(luò)資源绣檬,所以當(dāng)一個(gè)socket連接中沒有數(shù)據(jù)的傳輸足陨,那么為了維持連接需要發(fā)送心跳消息,具體心跳消息格式是開發(fā)者自己定義的娇未。

墨缘,瀏覽的網(wǎng)頁(yè)都是以http協(xié)議傳輸?shù)侥愕臑g覽器,而http是基于socket之上的零抬。socket是一套完成tcp udp協(xié)議的接口镊讼。

HTTP協(xié)議:簡(jiǎn)單對(duì)象訪問協(xié)議,對(duì)應(yīng)于應(yīng)用層平夜,HTTP協(xié)議是基于TCP連接的狠毯。

TCP協(xié)議:對(duì)應(yīng)于傳輸層

IP協(xié)議: ? ?對(duì)應(yīng)于網(wǎng)絡(luò)層

TCP/IP協(xié)議是傳輸層協(xié)議,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸褥芒;而HTTP是應(yīng)用層協(xié)議,主要解決如何包裝數(shù)據(jù)。

Socket是對(duì)TCP/IP協(xié)議的封裝锰扶,Socket本身并不是協(xié)議献酗,而是一個(gè)調(diào)用接口(API),通過Socket坷牛,我們才能使用TCP/IP協(xié)議罕偎。

HTTP協(xié)議:http連接就是所謂的短連接,及客戶端向服務(wù)器端發(fā)送一次請(qǐng)求京闰,服務(wù)器端響應(yīng)后連接即會(huì)斷掉颜及。

什么是socket

socket是一個(gè)針對(duì)TCP和UDP編程的接口,你可以借助它建立TCP連接等等蹂楣。而TCP和UDP協(xié)議屬于傳輸層俏站。而HTTP是個(gè)應(yīng)用層的協(xié)議,它實(shí)際上也建立在TCP協(xié)議上痊土。(而HTTP是轎車肄扎,提供了封裝或者顯示數(shù)據(jù)的具體形式;Socket是發(fā)動(dòng)機(jī)赁酝,提供了網(wǎng)絡(luò)通信的能力犯祠。)

2)socket是對(duì)TCP/IP協(xié)議的封裝,socket本身并不是協(xié)議酌呆,而是一個(gè)調(diào)用接口(API)衡载,通過Socket,我們才能使用tcp隙袁、ip協(xié)議痰娱。Socket的出現(xiàn)只是使得程序員更方便地使用TCP/IP協(xié)議棧而已,是對(duì)TCP/IP協(xié)議的抽象藤乙,從而形成了我們知道的一些最基本的函數(shù)接口

在一個(gè)對(duì)象里面self.name="object"和name=“object”有什么不同

self.name = "object"會(huì)調(diào)用對(duì)象的setName()方法猜揪,

name = "object"會(huì)直接把object賦值給當(dāng)前對(duì)象的name 屬性

并且 self.name 這樣retainCount會(huì)加1,而name就不會(huì)

1.深拷貝和淺拷貝的區(qū)別

深拷貝就是如果執(zhí)行拷貝時(shí),只要有可變的無論是可變對(duì)象還是可變拷貝(mutableCopy)

淺拷貝就是不可變對(duì)象執(zhí)行的不可變拷貝

簡(jiǎn)單點(diǎn)說坛梁,只有源對(duì)象和副本對(duì)象都不可變才是淺拷貝而姐,其他的都是深拷貝

copy 創(chuàng)建的是不可變副本(NSString、NSArray划咐、NSDictionary)

mutableCopy 創(chuàng)建的是可變的副本(NSMutableString, NSMutableArray, NSMutableDictionary)

shallow copy 淺拷貝 (指針拷貝):相當(dāng)于做了一次retain操作拴念,引用計(jì)數(shù)加1,沒有產(chǎn)生新的對(duì)象褐缠,源對(duì)象和副本對(duì)象是同一個(gè)對(duì)象政鼠。

deep copy 深拷貝(內(nèi)容拷貝):源對(duì)象和副本對(duì)象是兩個(gè)不同的對(duì)象,源對(duì)象的引用計(jì)數(shù)不變队魏,副本對(duì)象的引用計(jì)數(shù)加1(產(chǎn)生了一個(gè)新的對(duì)象)

copy的效果:對(duì)源對(duì)象進(jìn)行拷貝公般,建立新的副本万搔,彼此修改互不干擾

copy目的:建立對(duì)象的副本。

如果對(duì)象有可變/不可變版本的區(qū)別官帘,copy方法瞬雹,只能拷貝出不可變的版本

如果對(duì)象沒有可變/不可變的區(qū)別,copy方法就是建立一個(gè)副本

副本的特點(diǎn):彼此的內(nèi)容一樣刽虹,具有相同的方法酗捌。

淺復(fù)制僅復(fù)制對(duì)象本身,對(duì)象里的屬性涌哲、包含的對(duì)象不做復(fù)制

深復(fù)制復(fù)制全部胖缤,包括對(duì)象的屬性和其他對(duì)象


1.assign 與weak區(qū)別

assign適用于基本數(shù)據(jù)類型,weak是適用于NSObject對(duì)象阀圾,并且是一個(gè)弱引用哪廓。

assign其實(shí)也可以用來修飾對(duì)象。那么我們?yōu)槭裁床挥盟揎棇?duì)象呢稍刀?因?yàn)楸籥ssign修飾的對(duì)象(一般編譯的時(shí)候會(huì)產(chǎn)生警告:Assigning retained object to unsafe property; object will be released after assignment)在釋放之后撩独,指針的地址還是存在的,也就是說指針并沒有被置為nil账月,造成野指針综膀。對(duì)象一般分配在堆上的某塊內(nèi)存,如果在后續(xù)的內(nèi)存分配中局齿,剛好分到了這塊地址剧劝,程序就會(huì)崩潰掉。

那為什么可以用assign修飾基本數(shù)據(jù)類型抓歼?因?yàn)榛A(chǔ)數(shù)據(jù)類型一般分配在棧上讥此,棧的內(nèi)存會(huì)由系統(tǒng)自己自動(dòng)處理,不會(huì)造成野指針谣妻。

weak修飾的對(duì)象在釋放之后萄喳,指針地址會(huì)被置為nil。所以現(xiàn)在一般弱引用就是用weak蹋半。weak使用場(chǎng)景:

在ARC下,在有可能出現(xiàn)循環(huán)引用的時(shí)候他巨,往往要通過讓其中一端使用weak來解決,比如: delegate代理屬性减江,通常就會(huì)聲明為weak染突。

自身已經(jīng)對(duì)它進(jìn)行一次強(qiáng)引用,沒有必要再?gòu)?qiáng)引用一次時(shí)也會(huì)使用weak辈灼。比如:自定義 IBOutlet控件屬性一般也使用weak份企,當(dāng)然也可以使用strong。

2.strong 與copy的區(qū)別

strong 與copy都會(huì)使引用計(jì)數(shù)加1巡莹,但strong是兩個(gè)指針指向同一個(gè)內(nèi)存地址司志,copy會(huì)在內(nèi)存里拷貝一份對(duì)象甜紫,兩個(gè)指針指向不同的內(nèi)存地址

3.__block與__weak的區(qū)別

__block是用來修飾一個(gè)變量,這個(gè)變量就可以在block中被修改

__block:使用 __block修飾的變量在block代碼塊中會(huì)被retain(ARC下會(huì)retain俐芯,MRC下不會(huì)retain)

__weak:使用__weak修飾的變量不會(huì)在block代碼塊中被retain

同時(shí)棵介,在ARC下,要避免block出現(xiàn)循環(huán)引用 __weak typedof(self)weakSelf = self;

4.1 block變量定義時(shí)為什么用copy吧史?block是放在哪里的?

block本身是像對(duì)象一樣可以retain唠雕,和release贸营。但是,block在創(chuàng)建的時(shí)候岩睁,它的內(nèi)存是分配在棧(stack)上钞脂,可能被隨時(shí)回收,而不是在堆(heap)上捕儒。他本身的作于域是屬于創(chuàng)建時(shí)候的作用域冰啃,一旦在創(chuàng)建時(shí)候的作用域外面調(diào)用block將導(dǎo)致程序崩潰。通過copy可以把block拷貝(copy)到堆刘莹,保證block的聲明域外使用阎毅。

特別需要注意的地方就是在把block放到集合類當(dāng)中去的時(shí)候,如果直接把生成的block放入到集合類中点弯,是無法在其他地方使用block扇调,必須要對(duì)block進(jìn)行copy。

[array addObject:[[^{

NSLog(@"hello!");

} copy] autorelease]];

block 為什么不用strong抢肛?

block如果用到了self狼钮,就會(huì)retain self,如果是strong的話捡絮,就造成了循環(huán)引用

官方文檔:You should specify copy as the property attribute, because a block needs to be copied to keep track of its captured state outside of the original scope.This isn’t something you need to worry about when using Automatic Reference Counting, as it will happen automatically, but it’s best practice for the property attribute to show the resultant behavior

什么是KVC和KVO

全稱是Key-value coding熬芜,翻譯成鍵值編碼

即鍵值編碼。它是一種不通過存取方法福稳,而通過屬性名稱字符串間接訪問屬性的機(jī)制涎拉。

KVO全稱是Key-value observing翻譯成鍵值觀察。提供了一種當(dāng)其它對(duì)象屬性被修改的時(shí)候能通知當(dāng)前對(duì)象的機(jī)制灵寺。

-(id)valueForKey:(NSString *)key;

? ? -(void)setValue:(id)value forKey:(NSString *)key;??

? -(id)valueForKeyPath:(NSString *)keyPath;?

?? -(void)setValue:(id)value forKeyPath:(NSString *)keyPath;

前兩個(gè)方法無論獲取值還是賦值曼库,只需要傳入屬性名稱的字符串就行了。但KVC也提供了傳入path的方法略板。所謂path毁枯,就是用點(diǎn)號(hào)連接的多層級(jí)的屬性,比如student.name叮称,student屬性里的name屬性种玛。

即鍵值觀察藐鹤。它是觀察者模式的一種衍生÷冈希基本思想是娱节,對(duì)目標(biāo)對(duì)象的某屬性添加觀察,當(dāng)該屬性發(fā)生變化時(shí)祭示,會(huì)自動(dòng)的通知觀察者肄满。這里所謂的通知是觸發(fā)觀察者對(duì)象實(shí)現(xiàn)的KVO的接口方法。

KVO是解決model和view同步的好法子质涛。

另外稠歉,KVO的優(yōu)點(diǎn)是當(dāng)被觀察的屬性值改變時(shí)是會(huì)自動(dòng)發(fā)送通知的,這比通知中心需要post通知來說汇陆,簡(jiǎn)單了許多怒炸。

KVO怎么用?

1.首先給目標(biāo)對(duì)象的屬性添加觀察

(void)addObserver:(NSObject *)observerforKeyPath:(NSString *)keyPathoptions:(NSKeyValueObservingOptions)optionscontext:(nullablevoid*)context;

2.實(shí)現(xiàn)下面方法來接收通知毡代,需要注意各個(gè)參數(shù)的含義

- (void)observeValueForKeyPath:(nullableNSString*)keyPath ofObject:(nullableid)object change:(nullableNSDictionary *)change context:(nullablevoid*)context;

3.最后要移除觀察者:

-(void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath;

#import"ViewController.h"

#import"Student.h"

@interfaceViewController()

{? ?

Student? ? ? ? ? ? *_student;}

@end

@implementation ? ViewController

- (void)viewDidLoad {?

? [superviewDidLoad];?

? _student = [[Student alloc] init];

? ? _student.stuName =@"oldName_hu";// 1.給student對(duì)象的添加觀察者阅羹,觀察其stuName屬性

[_student addObserver:selfforKeyPath:@"stuName"options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOldcontext:nil];// 此時(shí),stuName發(fā)生了變化

_student.stuName =@"newName_wang";}// stuName發(fā)生變化后教寂,觀察者(self)立馬得到通知捏鱼。

- (void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void*)context{

// 最好判斷目標(biāo)對(duì)象object和屬性路徑keyPath

if(object == _student && [keyPath isEqualToString:@"stuName"])? ? {

NSLog(@"----old:%@----new:%@",change[@"old"],change[@"new"]);? ?

}else{? ? ?

? [superobserveValueForKeyPath:keyPath ofObject:object change:change context:context];?

? }}

- (void)dealloc{// 移除觀察者[_student removeObserver:selfforKeyPath:@"stuName"];}@end

1.isa指針

每一個(gè)對(duì)象都包含一個(gè)isa指針.這個(gè)指針指向當(dāng)前對(duì)象所屬的類。

[p eat];表示給p所指向的對(duì)象發(fā)送一條eat消息,調(diào)用對(duì)象的eat方法,此時(shí)對(duì)象會(huì)順著內(nèi)部的isa指針找到存 儲(chǔ)于類中的方法,執(zhí)行孝宗。

isa是對(duì)象中的隱藏指針,指向創(chuàng)建這個(gè)對(duì)象的類穷躁。

通過isa指針我們可以在運(yùn)行的時(shí)候知道當(dāng)前對(duì)象是屬于那個(gè)Class(類)的


2.#import和#include區(qū)別

#import與#include的類似,都是把其后面的文件拷貝到該指令所在的地方

#import可以自動(dòng)防止重復(fù)導(dǎo)入

#import <> 用于包含系統(tǒng)文件

#import""用于包含本項(xiàng)目中的文件

#import和@class作用上的區(qū)別

#import會(huì)包含引用類的所有信息(內(nèi)容),包括引用類的變量和方法

@class僅僅是告訴編譯器有這么一個(gè)類, 具體這個(gè)類里有什么信息, 完全不知

什么是類工廠方法

類工廠方法是一種用于分配因妇、初始化實(shí)例并返回一個(gè)它自己的實(shí)例的類方法问潭。類工廠方法很方便,因?yàn)樗鼈冊(cè)试S您只使用一個(gè)步驟(而不是兩個(gè)步驟)就能創(chuàng)建對(duì)象. 例如new

(1)一定是+號(hào)開頭

(2)返回值一般是instancetype類型

(3)方法名稱以類名開頭,首字母小寫

+ (instancetype)person;

+ (instancetype)person

{

return? [[Person alloc]init];

}

+ (instancetype)personWithAge:(int)age;

+ (instancetype)personWithAge:(int)age

{

Person *p = [[self alloc] init];

[p setAge:age];

return p;

}

1婚被、主動(dòng)釋放池是什么如何勞動(dòng)狡忙?

當(dāng)您向一個(gè)對(duì)象發(fā)送一個(gè)autorelease消息時(shí),Cocoa就會(huì)將該對(duì)象的一個(gè)引用放入到最新的主動(dòng)釋放池址芯。它仍然是個(gè)正當(dāng)?shù)膶?duì)象灾茁,因此主動(dòng)開釋池定義的作用域內(nèi)的其它對(duì)象可以向它發(fā)送消息。當(dāng)程序執(zhí)行到作用域結(jié)束的位置時(shí)谷炸,主動(dòng)開釋池就會(huì)被開釋北专,池中的所有對(duì)象也就被開釋。

類工廠方法的完成是為了向客戶提供方便旬陡,它們將分配和初始化合在一個(gè)步驟中拓颓,返回被創(chuàng)建的對(duì)象,并

進(jìn)行主動(dòng)開釋處理描孟。這些方法的形式是+ (type)className...(其中className不包括任何前綴)驶睦。

工廠方法可能不僅僅為了方便使用砰左。它們不但可以將分配和初始化合在一起,還可以為初始化過程提供對(duì)

象的分配信息场航。

類工廠方法的另一個(gè)目的是使類(比如NSWorkspace)提供單件實(shí)例缠导。雖然init...方法可以確認(rèn)一

個(gè)類在每次程序運(yùn)轉(zhuǎn)過程只存在一個(gè)實(shí)例,但它須要首先分配一個(gè)“生的”實(shí)例溉痢,然后還必須開釋該實(shí)例僻造。你看解答。

工廠 方法則可以制止為可能沒有用的對(duì)象盲目分配內(nèi)存孩饼。

https://jiangxh1992.github.io/articles/2016-11/%E6%95%B0%E6%8D%AE%E6%8C%81%E4%B9%85%E5%8C%96

https://jiangxh1992.github.io/articles/2016-11/%E6%95%B0%E6%8D%AE%E6%8C%81%E4%B9%85%E5%8C%96

https://my.oschina.net/u/1245365/blog/294449

僵尸對(duì)象

已經(jīng)被銷毀的對(duì)象(不能再使用的對(duì)象)

野指針

指向僵尸對(duì)象(不可用內(nèi)存)的指針

空指針

沒有指向存儲(chǔ)空間的指針(里面存的是nil, 也就是0)

給空指針發(fā)消息是沒有任何反應(yīng)的


只要還有人在用某個(gè)對(duì)象嫡意,那么這個(gè)對(duì)象就不會(huì)被回收

只要你想用這個(gè)對(duì)象,就讓對(duì)象的計(jì)數(shù)器+1

當(dāng)你不再使用這個(gè)對(duì)象時(shí)捣辆,就讓對(duì)象的計(jì)數(shù)器-1

誰創(chuàng)建誰release : 如果你通過alloc、new或[mutable]copy來創(chuàng)建一個(gè)對(duì)象此迅,那么你必須調(diào)用release或autorelease

誰retain誰release :只要你調(diào)用了retain汽畴,就必須調(diào)用一次release

retain : release舊值,retain新值(用于OC對(duì)象)

assign : 直接賦值耸序,不做任何內(nèi)存管理(默認(rèn)忍些,用于非OC對(duì)象類型)

copy? : release舊值,copy新值(一般用于NSString *)

控制需不需生成set方法

readwrite :同時(shí)生成set方法和get方法(默認(rèn))

readonly? :只會(huì)生成get方法

多線程管理

atomic? ? :性能低(默認(rèn))

nonatomic :性能高


@class Dog;

僅僅是告訴編譯器: Dog是一個(gè)類; 并不會(huì)包含Dog這個(gè)類的所有內(nèi)容

作用上的區(qū)別

#import會(huì)包含引用類的所有信息(內(nèi)容), 包括引用類的變量和方法

@class僅僅是告訴編譯器有這么一個(gè)類, 具體這個(gè)類里有什么信息, 完全不知

效率上的區(qū)別

如果有上百個(gè)頭文件都#import了同一個(gè)文件坎怪,或者這些文件依次被#import,那么一旦最開始的頭文件稍有改動(dòng)罢坝,后面引用到這個(gè)文件的所有類都需要重新編譯一遍 , 編譯效率非常低

相對(duì)來講,使用@class方式就不會(huì)出現(xiàn)這種問題了


autorelease方法的基本作用

給對(duì)象發(fā)送一條autorelease消息, 會(huì)將對(duì)象放到一個(gè)自動(dòng)釋放池中

當(dāng)自動(dòng)釋放池被銷毀時(shí)搅窿,會(huì)對(duì)池子里面的所有對(duì)象做一次release操作

會(huì)返回對(duì)象本身

調(diào)用完autorelease方法后嘁酿,對(duì)象的計(jì)數(shù)器不變

autorelease的好處

不用再關(guān)心對(duì)象釋放的時(shí)間

不用再關(guān)心什么時(shí)候調(diào)用release

autorelease的使用注意

占用內(nèi)存較大的對(duì)象不要隨便使用autorelease

占用內(nèi)存較小的對(duì)象使用autorelease,沒有太大影響

在iOS程序運(yùn)行過程中男应,會(huì)創(chuàng)建無數(shù)個(gè)池子闹司。這些池子都是以棧結(jié)構(gòu)存在(先進(jìn)后出)

當(dāng)一個(gè)對(duì)象調(diào)用autorelease方法時(shí),會(huì)將這個(gè)對(duì)象放到棧頂?shù)尼尫懦?/p>


What is advantage of categories? What is difference between implementing a category and inheritance?

分類可以在不修改原來類模型的基礎(chǔ)上拓充方法

分類只能擴(kuò)充方法沐飘、不能擴(kuò)充成員變量游桩;繼承可以擴(kuò)充方法和成員變量

繼承會(huì)產(chǎn)生新的類


Difference between categories and extensions?

分類是有名稱的,類擴(kuò)展沒有名稱

分類只能擴(kuò)充方法耐朴、不能擴(kuò)充成員變量借卧;類擴(kuò)展可以擴(kuò)充方法和成員變量

類擴(kuò)展一般就寫在.m文件中,用來擴(kuò)充私有的方法和成員變量(屬性)


What are KVO and KVC?

KVC是鍵值編碼筛峭,可以通過一個(gè)字符串的key(屬性名)修改對(duì)象的屬性值

KVO是鍵值監(jiān)聽铐刘,可以監(jiān)聽一個(gè)對(duì)象屬性值的改變

What are mutable and immutable types in Objective C?

mutable是可變類型,比如NSMutableArray蜒滩,可以動(dòng)態(tài)往里面添加元素

immutable是不可變類型滨达,比如NSArray奶稠,固定的存儲(chǔ)空間,不能添加元素


what is difference between NSNotification and protocol?

通過NSNotification可以給多個(gè)對(duì)象傳遞數(shù)據(jù)和消息

通過protocol(代理模式)只能給一個(gè)對(duì)象傳遞數(shù)據(jù)和消息


What is Singleton?

單粒:保證程序運(yùn)行過程中捡遍,永遠(yuǎn)只有一個(gè)對(duì)象實(shí)例

目的是:全局共享一份資源锌订、節(jié)省不必要的內(nèi)存開銷


Difference between frame and bounds?

frame以父控件的左上角為坐標(biāo)原點(diǎn)

bounds以控件本身的左上角為坐標(biāo)原點(diǎn)


Difference between method and selector?

通過一個(gè)selector可以找到方法地址,進(jìn)而調(diào)用一個(gè)方法

What is lazy loading?

延遲加載:比如控制器的view画株,在第一次用到view時(shí)才會(huì)調(diào)用loadView方法進(jìn)行創(chuàng)建


How can you store data in iPhone applications?

屬性列表

Preference(NSUserDefaults)

鍵值歸檔(NSKeyedArchiver辆飘、NSCoding)

SQLite數(shù)據(jù)庫(kù)

Core Data


What is predicate?

謂詞:可以以一定條件來過濾數(shù)組、字典等集合數(shù)據(jù)谓传,也能用在Core Data的數(shù)據(jù)查詢中

Object-C有私有方法嗎蜈项?私有變量呢?

OC沒有類似@private的修飾詞來修飾方法续挟,只要寫在.h文件中紧卒,就是公共方法

可以使用類擴(kuò)展(Extension)來增加私有方法和私有變量


Object-C有多繼承嗎?沒有的話用什么代替诗祸?

OC是單繼承跑芳,沒有多繼承

有時(shí)可以用分類和協(xié)議來代替多繼承


關(guān)鍵字const什么含義?

const int a;

int const a;

const int *a;

int const *a;

int * const a;

int const * const a;

1> 前兩個(gè)的作用是一樣:a 是一個(gè)常整型數(shù)

2> 第三直颅、四個(gè)意味著 a 是一個(gè)指向常整型數(shù)的指針(整型數(shù)是不可修改的博个,但指針可以)

3> 第五個(gè)的意思:a 是一個(gè)指向整型數(shù)的常指針(指針指向的整型數(shù)是可以修改的,但指針是不可修改的)

4> 最后一個(gè)意味著:a 是一個(gè)指向常整型數(shù)的常指針(指針指向的整型數(shù)是不可修改的功偿,同時(shí)指針也是不可修改的)


static的作用盆佣?

static修飾的函數(shù)是一個(gè)內(nèi)部函數(shù),只能在本文件中調(diào)用械荷,其他文件不能調(diào)用

static修飾的全部變量是一個(gè)內(nèi)部變量共耍,只能在本文件中使用,其他文件不能使用

static修飾的局部變量只會(huì)初始化一次养葵,并且在程序退出時(shí)才會(huì)回收內(nèi)存

堆和棧的區(qū)別征堪?

堆空間的內(nèi)存是動(dòng)態(tài)分配的,一般存放對(duì)象关拒,并且需要手動(dòng)釋放內(nèi)存

椀柩粒空間的內(nèi)存由系統(tǒng)自動(dòng)分配,一般存放局部變量等着绊,不需要手動(dòng)管理內(nèi)存


為什么很多內(nèi)置的類谐算,如TableView的delegate的屬性是assign不是retain?

tableView的代理一般都是它所屬的控制器归露,控制器會(huì)對(duì)它內(nèi)部的view做一次retain操作

假設(shè)tableView也對(duì)代理(控制器)做一次retain操作洲脂,那么就出現(xiàn)循環(huán)retain問題


線程和進(jìn)程的區(qū)別?

一個(gè)應(yīng)用程序?qū)?yīng)一個(gè)進(jìn)程,一個(gè)進(jìn)程幫助程序占據(jù)一塊存儲(chǔ)空間

要想在進(jìn)程中執(zhí)行任務(wù)恐锦,就必須開啟線程往果,一條線程就代表一個(gè)任務(wù)

一個(gè)進(jìn)程中允許開啟多條線程,也就是同時(shí)執(zhí)行多個(gè)任務(wù)


tableView的重用機(jī)制一铅?

這里只是簡(jiǎn)述:將離開屏幕的cell放到緩存池陕贮,重新拿來顯示到屏幕的其他位置

loadView

當(dāng)?shù)谝淮问褂每刂破鞯膙iew時(shí),會(huì)調(diào)用loadView方法創(chuàng)建view

一般在這里自定義view

viewDidLoad

當(dāng)控制器的view創(chuàng)建完畢時(shí)會(huì)調(diào)用潘飘,也就是在loadView后調(diào)用

一般在這里添加子控件肮之、初始化數(shù)據(jù)

viewDidUnload

當(dāng)控制器的view因?yàn)閮?nèi)存警告被銷毀時(shí)調(diào)用

一般在這里回收跟界面相關(guān)的資源(界面都會(huì)銷毀了,跟界面相關(guān)的資源肯定不要了)

ViewController的didReceiveMemoryWarning是在什么時(shí)候調(diào)用的卜录?默認(rèn)的操作是什么戈擒?

當(dāng)應(yīng)用程序接收到系統(tǒng)的內(nèi)容警告時(shí),就有可能調(diào)用控制器的didRece…Warning方法

它的默認(rèn)做法是:

當(dāng)控制器的view不在窗口上顯示時(shí)艰毒,就會(huì)直接銷毀筐高,并且調(diào)用viewDidUnload方法

1.maven介紹

它是apache旗下的一款開源工具?

Maven是基于POM(工程對(duì)象模型),通過一小段描述來對(duì)項(xiàng)目的代碼丑瞧、報(bào)告凯傲、文件進(jìn)管理的工具。

Maven是一個(gè)跨平臺(tái)的項(xiàng)目管理工具嗦篱,它是使用java開發(fā)的,它要依賴于jdk1.6及以上

Maven主要有兩大功能:管理依賴幌缝、項(xiàng)目構(gòu)建灸促。

依賴指的就是jar包。

所有的項(xiàng)目配置信息都被定義在一個(gè)叫做POM.xml的文件中涵卵,

通過該文件Maven可以管理項(xiàng)目的整個(gè)生命周期浴栽,包括清除,編譯轿偎,測(cè)試典鸡,報(bào)告,打包部署等坏晦。



eclipse使用eclipse進(jìn)行項(xiàng)目構(gòu)建萝玷,相對(duì)來說,步驟比較零散昆婿,不好操作

Ant它是一個(gè)專門的項(xiàng)目構(gòu)建工具球碉,它可以通過一些配置來完成項(xiàng)目構(gòu)建,這些配置要明確的告訴ant仓蛆,源碼包在哪睁冬?目標(biāo)class文件應(yīng)該存放在哪?資源文件應(yīng)該在哪

Maven它是一個(gè)項(xiàng)目管理工具看疙,他也是一個(gè)項(xiàng)目構(gòu)建工具豆拨,通過使用maven直奋,可以對(duì)項(xiàng)目進(jìn)行快速簡(jiǎn)單的構(gòu)建,它不需要告訴maven很多信息施禾,但是需要安裝maven去的規(guī)范去進(jìn)行代碼的開發(fā)脚线。也就是說maven是有約束的。

maven解決的問題

jar包的聲明式管理與管理

自動(dòng)構(gòu)建發(fā)布項(xiàng)目

maven拾积,ant殉挽,svn的區(qū)別

maven 和ant之間的區(qū)別

都是軟件構(gòu)建工具,軟件管理工具拓巧,maven比ant更加強(qiáng)大斯碌,已經(jīng)取代了ant

maven優(yōu)點(diǎn):jar包聲明式依賴。jar包倉(cāng)庫(kù)

maven與svn的區(qū)別

maven軟件構(gòu)建工具肛度,是軟件源碼已經(jīng)完畢傻唾,需要構(gòu)建,需要部署與發(fā)布

svn是版本控制工具承耿,是協(xié)同開發(fā)工具

svn倉(cāng)庫(kù):項(xiàng)目源碼保存冠骄,歷史版本的備份,每一次版本的修改情況

maven軟件目錄介紹

1.lib:共享庫(kù)加袋。maven軟件依賴的lib jar包

boot:plexus-classworlds-2.5.1.jar

該文件是jar包下載的引擎凛辣,通過該工具來下載jar包,第三方項(xiàng)目以來的jar包

maven本身的軟件構(gòu)建的生命周期插件的jar包

測(cè)試maven是否安裝成功

mvn -version?

配置:環(huán)境變量path=“C:\apache-maven-3.2.1\bin” java

java語言可移植性职烧,

在window和Linnex和上安裝一個(gè)虛擬機(jī)

JRE java的運(yùn)行環(huán)境

JDK里面自帶一個(gè)JRE


編譯: xxx.java(源文件)----編譯()---生成java.class(字節(jié)碼)文件----

運(yùn)行:類裝載器負(fù)責(zé)將.class文件?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末扁誓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蚀之,更是在濱河造成了極大的恐慌蝗敢,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件足删,死亡現(xiàn)場(chǎng)離奇詭異寿谴,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)失受,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門讶泰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拂到,你說我怎么就攤上這事峻厚。” “怎么了谆焊?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵惠桃,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng)辜王,這世上最難降的妖魔是什么劈狐? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮呐馆,結(jié)果婚禮上肥缔,老公的妹妹穿的比我還像新娘。我一直安慰自己汹来,他們只是感情好续膳,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著收班,像睡著了一般坟岔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上摔桦,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天社付,我揣著相機(jī)與錄音,去河邊找鬼邻耕。 笑死鸥咖,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的兄世。 我是一名探鬼主播啼辣,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼御滩!你這毒婦竟也來了熙兔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤艾恼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后麸锉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钠绍,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年花沉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了柳爽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡碱屁,死狀恐怖磷脯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情娩脾,我是刑警寧澤赵誓,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響俩功,放射性物質(zhì)發(fā)生泄漏幻枉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一诡蜓、第九天 我趴在偏房一處隱蔽的房頂上張望熬甫。 院中可真熱鬧,春花似錦蔓罚、人聲如沸椿肩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽郑象。三九已至,卻和暖如春核无,著一層夾襖步出監(jiān)牢的瞬間扣唱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工团南, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留噪沙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓吐根,卻偏偏與公主長(zhǎng)得像正歼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拷橘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

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

  • iOS面試小貼士 ———————————————回答好下面的足夠了------------------------...
    不言不愛閱讀 1,984評(píng)論 0 7
  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,150評(píng)論 30 470
  • 史上最全的iOS面試題及答案 iOS面試小貼士———————————————回答好下面的足夠了----------...
    Style_偉閱讀 2,356評(píng)論 0 35
  • 多線程局义、特別是NSOperation 和 GCD 的內(nèi)部原理。運(yùn)行時(shí)機(jī)制的原理和運(yùn)用場(chǎng)景冗疮。SDWebImage的原...
    LZM輪回閱讀 2,008評(píng)論 0 12
  • 為什么要成立這家科技公司术幔? 企業(yè)的市場(chǎng)定位是什么另萤? 核心競(jìng)爭(zhēng)力是什么? 滿足客戶什么需求诅挑? 2017年-2018預(yù)...
    神奇閱讀閱讀 199評(píng)論 0 0