ios面試題

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

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

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

@class delegateView

@protocolViewDelegate

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

2.定義代理屬性,用來存儲代理屬性

@interface DelegateView :UIView

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

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

@end

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

為DelegateView指定代理對象.(找個(gè)代理干活),例如:我們定義一個(gè)紅色視圖(要求點(diǎn)擊時(shí)改變自身視圖顏色),然后為它指定一個(gè)代理對象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

請概括一下Core Audio,Core Data以及Core Location各是什么。它們對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è)音頻流,自動適應(yīng)耳機(jī),藍(lán)牙耳機(jī)等硬件,響應(yīng)各種電話中斷,靜音,震動等,甚至提供3D效果的音樂播放。

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

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

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

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

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

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

HTTP協(xié)議:簡單對象訪問協(xié)議,對應(yīng)于應(yīng)用層,HTTP協(xié)議是基于TCP連接的。

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

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

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

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

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

什么是socket

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

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

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

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

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

并且 self.name 這樣retainCount會加1,而name就不會

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

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

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

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

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

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

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

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

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

copy目的:建立對象的副本。

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

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

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

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

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


1.assign 與weak區(qū)別

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

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

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

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

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

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

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

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

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

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

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

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

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

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

block本身是像對象一樣可以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,必須要對block進(jìn)行copy。

[array addObject:[[^{

NSLog(@"hello!");

} copy] autorelease]];

block 為什么不用strong?

block如果用到了self,就會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)其它對象屬性被修改的時(shí)候能通知當(dāng)前對象的機(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)號連接的多層級的屬性,比如student.name,student屬性里的name屬性。

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

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

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

KVO怎么用?

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

(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對象的添加觀察者,觀察其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)對象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è)對象都包含一個(gè)isa指針.這個(gè)指針指向當(dāng)前對象所屬的類。

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

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

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


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

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

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

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

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

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

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

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

什么是類工廠方法

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

(1)一定是+號開頭

(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)您向一個(gè)對象發(fā)送一個(gè)autorelease消息時(shí),Cocoa就會將該對象的一個(gè)引用放入到最新的主動釋放池。它仍然是個(gè)正當(dāng)?shù)膶ο?,因此主動開釋池定義的作用域內(nèi)的其它對象可以向它發(fā)送消息。當(dāng)程序執(zhí)行到作用域結(jié)束的位置時(shí),主動開釋池就會被開釋,池中的所有對象也就被開釋。

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

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

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

象的分配信息。

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

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

工廠 方法則可以制止為可能沒有用的對象盲目分配內(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

僵尸對象

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

野指針

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

空指針

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

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


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

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

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

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

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

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

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

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

控制需不需生成set方法

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

readonly? :只會生成get方法

多線程管理

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

nonatomic :性能高


@class Dog;

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

作用上的區(qū)別

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

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

效率上的區(qū)別

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

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


autorelease方法的基本作用

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

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

會返回對象本身

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

autorelease的好處

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

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

autorelease的使用注意

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

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

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

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


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

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

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

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


Difference between categories and extensions?

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

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

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


What are KVO and KVC?

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

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

What are mutable and immutable types in Objective C?

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

immutable是不可變類型,比如NSArray,固定的存儲空間,不能添加元素


what is difference between NSNotification and protocol?

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

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


What is Singleton?

單粒:保證程序運(yùn)行過程中,永遠(yuǎn)只有一個(gè)對象實(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í)才會調(diào)用loadView方法進(jìn)行創(chuàng)建


How can you store data in iPhone applications?

屬性列表

Preference(NSUserDefaults)

鍵值歸檔(NSKeyedArchiver、NSCoding)

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

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修飾的局部變量只會初始化一次,并且在程序退出時(shí)才會回收內(nèi)存

堆和棧的區(qū)別?

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

??臻g的內(nèi)存由系統(tǒng)自動分配,一般存放局部變量等,不需要手動管理內(nèi)存


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

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

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


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

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

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

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


tableView的重用機(jī)制?

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

loadView

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

一般在這里自定義view

viewDidLoad

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

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

viewDidUnload

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

一般在這里回收跟界面相關(guān)的資源(界面都會銷毀了,跟界面相關(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í),就會直接銷毀,并且調(diào)用viewDidUnload方法

1.maven介紹

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

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

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

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

依賴指的就是jar包。

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

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



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

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,可以對項(xiàng)目進(jìn)行快速簡單的構(gòu)建,它不需要告訴maven很多信息,但是需要安裝maven去的規(guī)范去進(jìn)行代碼的開發(fā)。也就是說maven是有約束的。

maven解決的問題

jar包的聲明式管理與管理

自動構(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包倉庫

maven與svn的區(qū)別

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

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

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

maven軟件目錄介紹

1.lib:共享庫。maven軟件依賴的lib jar包

boot:plexus-classworlds-2.5.1.jar

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

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

測試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)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容