每天四道題棉圈,讓精彩填滿生活...
1卸察、簡(jiǎn)述OC中內(nèi)存管理機(jī)制既忆。與retain配對(duì)使用的方法是dealloc還是release柠座,為什么?需要與alloc配對(duì)使用的方法是dealloc還是release片橡,為什么妈经?readwrite,readonly捧书,assign吹泡,retain,copy经瓷,nonatomic爆哑、atomic、strong舆吮、weak屬性的作用揭朝?え
答:Objective - C 是使用引用計(jì)數(shù)的概念來進(jìn)行內(nèi)存管理的,當(dāng)一個(gè)對(duì)象在創(chuàng)建之后它的引用計(jì)數(shù)器值+1色冀,當(dāng)調(diào)用這個(gè)對(duì)象的alloc潭袱、retain、new锋恬、copy方法之后引用計(jì)數(shù)器值自動(dòng)在原來的基礎(chǔ)上+1屯换,當(dāng)調(diào)用這個(gè)對(duì)象的release方法之后它的引用計(jì)數(shù)器值-1,如果一個(gè)對(duì)象的引用計(jì)數(shù)器值為0与学,則系統(tǒng)會(huì)自動(dòng)調(diào)用這個(gè)對(duì)象的dealloc方法來銷毀這個(gè)對(duì)象彤悔。
與retain配對(duì)使用的方法是release, 與alloc 配對(duì)使用的方法是dealloc, 因?yàn)閞etain 就要銷毀索守,創(chuàng)建就要釋放晕窑;
readwrite 是可讀可寫(set 和 get 方法) ? ?readonly 是只讀 (只有set方法) assign 是只取 (只有g(shù)et方法) retain/copy 賦值并且引用計(jì)數(shù)+1 nonatomic/atomic 原子性和非原子性 (保證多線程安全)?
strong/weak 兩者都是在ARC下使用的,strong 相當(dāng)于retain卵佛, weak 相當(dāng)于assign幕屹,可以把對(duì)應(yīng)的指針變量置空。ps:xcode4.2用retain 和assign级遭,xcode4.3 或以上版本用strong 與weak 望拖。
assign 修飾一般類型, retain 修飾對(duì)象類型挫鸽。
2说敏、類變量的@protected ,@private,@public,@package,聲明各有什么含義丢郊?
答:首先它們都是存取權(quán)限的設(shè)定盔沫,換句話而言就是變量的作用域医咨。
@protected:受保護(hù)的,只有本類和子類可以調(diào)用架诞;
@private:私有的拟淮,只有本類可以調(diào)用;
@public:公共的谴忧,全局可以調(diào)用很泊,也可以放到其他模塊去調(diào)用,開放性最大沾谓。
@package:本包內(nèi)可以使用委造,跨包不可以使用;ps:蘋果的官方文檔是這么解釋的:這個(gè)實(shí)例變量最有效的范圍 in framework classes均驶。
3昏兆、線程是什么?進(jìn)程是什么妇穴?二者有什么區(qū)別和聯(lián)系爬虱?
答:線程和進(jìn)程都是操作系統(tǒng)所負(fù)責(zé)的程序運(yùn)行的基本單元,系統(tǒng)通過該基本單元實(shí)現(xiàn)對(duì)程序的并發(fā)性腾它。
線程和進(jìn)程兩者之間的區(qū)別和聯(lián)系:它們是操作系統(tǒng)的兩種不同的資源管理方式饮潦,進(jìn)程有自己獨(dú)立的地址空間,所以一個(gè)進(jìn)程奔潰后携狭,在保護(hù)模式下不會(huì)對(duì)其他進(jìn)程產(chǎn)生影響继蜡。而線程只是一個(gè)進(jìn)程中不同的執(zhí)行路線,線程有自己的堆區(qū)逛腿、棧區(qū)和局部變量稀并,但是線程沒有獨(dú)立的地址空間,一個(gè)線程死掉就等于整個(gè)進(jìn)程死掉单默,所以多進(jìn)程的程序要比多線程的程序健碩碘举。
但是進(jìn)程切換時(shí),耗費(fèi)資源較大搁廓,效率要差一些引颈,但是對(duì)于一些要求同時(shí)進(jìn)行并要共享某些變量的并發(fā)操作,只能用線程境蜕,不能使用進(jìn)程蝙场。
4、談?wù)勀銓?duì)多線程開發(fā)的理解粱年,iOS中有幾種實(shí)現(xiàn)多線程的方法售滤。
答:多線程開發(fā)的優(yōu)缺點(diǎn):
優(yōu)點(diǎn):
1〉使用多線程可以把程序中耗時(shí)較長(zhǎng)的任務(wù)放到后臺(tái)去處理,如加載圖片、視頻等等完箩。
2〉發(fā)揮多核處理器的優(yōu)勢(shì)赐俗,并發(fā)執(zhí)行讓系統(tǒng)運(yùn)行的更快、更流暢弊知,用戶體驗(yàn)更好阻逮。
缺點(diǎn):
1〉大量的線程會(huì)減低代碼的可讀性
2〉更多的線程需要更多的內(nèi)存空間
3〉當(dāng)多個(gè)線程對(duì)同一資源進(jìn)行爭(zhēng)奪時(shí),要注意線程安全 秩彤。ps:比如說加線程鎖之類的操作叔扼。
iOS 一共有三種創(chuàng)建多線程的方法:
1〉NSThread?
// ?第一種創(chuàng)建方式
[NSThread detachNewThreadSelector:@selector(doSomething:) toTarget:self withObject:nil];
第二種創(chuàng)建方式
NSThread *myThread = [[NSThread alloc] initWithTarget:self selector:@selector(doSomething:) object:nil];
2〉NSOperationQueue
NSOperationQueue*oprationQueue= [[NSOperationQueuealloc] init];
oprationQueueaddOperationWithBlock:^{
//這個(gè)block語(yǔ)句塊在子線程中執(zhí)行
}
3〉GCD
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//耗時(shí)的操作
dispatch_async(dispatch_get_main_queue(), ^{
//更新界面
});