無(wú)標(biāo)題文章

[※]@property中有哪些屬性關(guān)鍵字?

有3類。ARC下默認(rèn)是(atomic, assign, readwrite)。

1.atomic, nonatomic

atomic:原子的。表示該變量為線程安全型,多線程中只能有一個(gè)線程能對(duì)它進(jìn)行訪問(wèn),但是會(huì)影響訪問(wèn)速度。在非ARC編譯環(huán)境下,需要設(shè)置訪問(wèn)鎖來(lái)保證對(duì)該變量進(jìn)行正確的get/set。

nonatomic:非原子的。表示該變量為非線程安全型,多個(gè)線程可以同時(shí)對(duì)其進(jìn)行訪問(wèn),訪問(wèn)速度比較快。但是當(dāng)兩個(gè)不同的線程對(duì)其訪問(wèn)時(shí),容易失控。

2.assign, retain, strong, weak, copy

assign:表示簡(jiǎn)單賦值,不更改索引計(jì)數(shù)。常用于基本數(shù)據(jù)類型,如NSInteger, CGFloat等。需要注意的是,delegate也是assign類型(原因見(jiàn)http://stackoverflow.com/questions/918698/why-are-objective-c-delegates-usually-given-the-property-assign-instead-of-retai)。

retain:MRC默認(rèn)值,意思是使用引用計(jì)數(shù),每retain一次+1,release一次-1,當(dāng)引用計(jì)數(shù)為0時(shí),dealloc被調(diào)用,內(nèi)存被釋放。

strong:ARC默認(rèn)值。強(qiáng)引用,只要有strong指針,就不會(huì)被釋放。

weak:弱引用,如果沒(méi)有strong指針了,就會(huì)立即被釋放。

copy:用于非共享內(nèi)存時(shí),每個(gè)指針有自己的內(nèi)存空間,即建立一個(gè)相同的的對(duì)象。

3.readonly, readwrite

readonly:只有g(shù)et方法,沒(méi)有set方法。

readwrite:有g(shù)et/set方法。

[※]weak屬性需要在dealloc中置nil么?

不需要。在ARC環(huán)境下,系統(tǒng)會(huì)自動(dòng)釋放所有實(shí)例變量。但是,當(dāng)你有一些特殊的非Obj-c對(duì)象的實(shí)例變量時(shí),你就需要在dealloc中處理他們(如CFRelease)。

詳細(xì)見(jiàn):http://stackoverflow.com/questions/7906804/do-i-set-properties-to-nil-in-dealloc-when-using-arc

延伸:ARC下dealloc過(guò)程及.cxx_destruct的探究 http://blog.sunnyxx.com/2014/04/02/objc_dig_arc_dealloc/

[※※]@synthesize和@dynamic分別有什么作用?

synthesize會(huì)自動(dòng)生成setter和getter方法。

dynamic是告訴編譯器setter和getter方法在這個(gè)類本身不會(huì)實(shí)現(xiàn),而是在其他的地方,比如父類或者會(huì)在運(yùn)行時(shí)提供。常用于CoreData。或者想把父類定義的一個(gè)property在子類中創(chuàng)建一個(gè)outlet時(shí)使用。

參考:http://stackoverflow.com/questions/1160498/synthesize-vs-dynamic-what-are-the-differences

[※※※]ARC下,不顯式指定任何屬性關(guān)鍵字時(shí),默認(rèn)的關(guān)鍵字都有哪些?

ARC下默認(rèn)是(atomic, assign, readwrite)。

非ARC下默認(rèn)是(atomic, retain, readwrite)。

[※※※]用@property聲明的NSString(或NSArray,NSDictionary)經(jīng)常使用copy關(guān)鍵字,為什么?如果改用strong關(guān)鍵字,可能造成什么問(wèn)題?

當(dāng)某個(gè)對(duì)象的類有可修改的子類(例如NSString/NSMutableString)時(shí),應(yīng)該將該屬性的內(nèi)存管理特性設(shè)置為copy。

當(dāng)使用strong時(shí),這個(gè)屬性有可能在你不知情的情況下被更改。

[※※※]@synthesize合成實(shí)例變量的規(guī)則是什么?假如property名為foo,存在一個(gè)名為_(kāi)foo的實(shí)例變量,那么還會(huì)自動(dòng)合成新變量么?

默認(rèn)的合成規(guī)則是這樣:

@synthesize foo = _foo;

不會(huì)了。

foo和_foo

[※※※※※]在有了自動(dòng)合成屬性實(shí)例變量之后,@synthesize還有哪些使用場(chǎng)景?

當(dāng)你想手動(dòng)自定義setter和getter方法的時(shí)候。如readwrite property自定義setter/getter,readonly自定義getter。或者是以下情況:

1.protocol 中定義的屬性(不會(huì)自動(dòng)合成)。

2.重寫(xiě)父類的屬性時(shí)。

3.Category 中聲明的屬性:這種情況,@synthesize 指令不但不能被編譯器自動(dòng)生成,也不能手動(dòng)合成屬性。雖然category可以聲明屬性,但不能合成,因?yàn)閏ategory不能創(chuàng)建類實(shí)例變量ivars.為了完整起見(jiàn),我還是加了這項(xiàng),因?yàn)檫€是可以通過(guò)Objective-C運(yùn)行時(shí)偽造合成屬性

參考:http://stackoverflow.com/questions/19784454/when-should-i-use-synthesize-explicitly

[※※]objc中向一個(gè)nil對(duì)象發(fā)送消息將會(huì)發(fā)生什么?

什么也不會(huì)發(fā)生。不會(huì)崩潰,也不會(huì)接收對(duì)應(yīng)的消息。

[※※※]objc中向一個(gè)對(duì)象發(fā)送消息[obj foo]和objc_msgSend()函數(shù)之間有什么關(guān)系?

[obj foo];

objc_msgSend(obj, @selector(foo));

這兩個(gè)函數(shù)是等價(jià)的。

[※※※]什么時(shí)候會(huì)報(bào)unrecognized selector的異常?

1.給一個(gè)對(duì)象發(fā)送消息時(shí),先要看這個(gè)對(duì)象能否接收這個(gè)消息。即查看這個(gè)類有沒(méi)有這個(gè)方法,或者有沒(méi)有實(shí)現(xiàn)這個(gè)方法。

2.如果不能接收的話,系統(tǒng)會(huì)調(diào)用+resolveInstanceMethod這個(gè)方法進(jìn)行動(dòng)態(tài)方法處理。

3.如果resolveMethod返回NO,則會(huì)調(diào)用forwardingTargetForSelector進(jìn)行消息轉(zhuǎn)發(fā)。

4.如果我們沒(méi)有實(shí)現(xiàn)forwardingTargetForSelector,系統(tǒng)就會(huì)調(diào)用 methodSignatureForSelector和 forwardInvocation。

其中,methodSignatureForSelector用來(lái)生成方法簽名,這個(gè)簽名就是給 forwardInvocation中的參數(shù) NSInvocation調(diào)用的。

而錯(cuò)誤unrecognized selector sent to instance原因,原來(lái)就是因?yàn)閙ethodSignatureForSelector這個(gè)方法中,由于沒(méi)有找到run對(duì)應(yīng)的實(shí)現(xiàn)方法,所以返回了一個(gè)空的方法簽名,最終導(dǎo)致程序報(bào)錯(cuò)崩潰。

參考:http://www.itdecent.cn/p/1bde36ad9938

[※※※※]一個(gè)objc對(duì)象如何進(jìn)行內(nèi)存布局?(考慮有父類的情況)

1. 類C的類對(duì)象(class object)的 super_class都指向了類C父類的類對(duì)象(class object), ?NSObject的類對(duì)像的 super_class指向0x0

2. 類C的類對(duì)象(class object)的 isa指針都指向他的元類對(duì)象(metaclass object)

3. 類C的元類對(duì)象(metaclass object)的 super_class指針指向父類的元類對(duì)象(metaclass object), 例外: NSObject的元類對(duì)象(metaclass object)的 super_class指向NSObject的類對(duì)象(class object).

4. 類C的元類對(duì)象(metaclass object)的 isa指針指都指向 NSObject的元類對(duì)象(metaclass object)

參考:http://www.cnblogs.com/csutanyu/archive/2011/12/12/objective-c_memory_layout.html

[※※※※]一個(gè)objc對(duì)象的isa的指針指向什么?有什么作用?

任何直接或間接繼承了NSObject的類,它的實(shí)例對(duì)象(instacne objec)中都有一個(gè)isa指針,指向它的類對(duì)象(class object)。這個(gè)類對(duì)象(class object)中存儲(chǔ)了關(guān)于這個(gè)實(shí)例對(duì)象(instace object)所屬的類的定義的一切:包括變量,方法,遵守的協(xié)議等等。

參考:http://www.cnblogs.com/csutanyu/archive/2011/12/12/objective-c_memory_layout.html

[※※※※]下面的代碼輸出什么?

@implementation Son : Father

- (id)init

{

self = [super init];

if (self) {

NSLog(@"%@", NSStringFromClass([self class]));

NSLog(@"%@", NSStringFromClass([super class]));

}

return self;

}

@end

2015-07-25 01:56:12.303 Obj-C Test[8117:1812010] Son

2015-07-25 01:56:12.305 Obj-C Test[8117:1812010] Son

原因: self 和 super 的區(qū)別在于,調(diào)用的方法,self是從本類里調(diào)用,super是從父類里調(diào)用。然而接收 class 這個(gè)方法的對(duì)象都是 Son *son這個(gè)對(duì)象。但是,Son這個(gè)類中沒(méi)有實(shí)現(xiàn) class 這個(gè)方法,父類Father中里面也沒(méi)有實(shí)現(xiàn),F(xiàn)ather的父類NSObject中才有實(shí)現(xiàn)。所以都是Son。

[※※※※]runtime如何通過(guò)selector找到對(duì)應(yīng)的IMP地址?(分別考慮類方法和實(shí)例方法)


[※※※※]使用runtime Associate方法關(guān)聯(lián)的對(duì)象,需要在主對(duì)象dealloc的時(shí)候釋放么?

[※※※※※]objc中的類方法和實(shí)例方法有什么本質(zhì)區(qū)別和聯(lián)系?

[※※※※※]_objc_msgForward函數(shù)是做什么的,直接調(diào)用它將會(huì)發(fā)生什么?

[※※※※※]runtime如何實(shí)現(xiàn)weak變量的自動(dòng)置nil?

[※※※※※]能否向編譯后得到的類中增加實(shí)例變量?能否向運(yùn)行時(shí)創(chuàng)建的類中添加實(shí)例變量?為什么?

[※※※]runloop和線程有什么關(guān)系?

[※※※]runloop的mode作用是什么?

[※※※※]以+ scheduledTimerWithTimeInterval...的方式觸發(fā)的timer,在滑動(dòng)頁(yè)面上的列表時(shí),timer會(huì)暫定回調(diào),為什么?如何解決?

[※※※※※]猜想runloop內(nèi)部是如何實(shí)現(xiàn)的?

[※]objc使用什么機(jī)制管理對(duì)象內(nèi)存?

[※※※※]ARC通過(guò)什么方式幫助開(kāi)發(fā)者管理內(nèi)存?

[※※※※]不手動(dòng)指定autoreleasepool的前提下,一個(gè)autorealese對(duì)象在什么時(shí)刻釋放?(比如在一個(gè)vc的viewDidLoad中創(chuàng)建)

[※※※※]BAD_ACCESS在什么情況下出現(xiàn)?

[※※※※※]蘋(píng)果是如何實(shí)現(xiàn)autoreleasepool的?

[※※]使用block時(shí)什么情況會(huì)發(fā)生引用循環(huán),如何解決?

[※※]在block內(nèi)如何修改block外部變量?

[※※※]使用系統(tǒng)的某些block api(如UIView的block版本寫(xiě)動(dòng)畫(huà)時(shí)),是否也考慮引用循環(huán)問(wèn)題?

[※※]GCD的隊(duì)列(dispatch_queue_t)分哪兩種類型?

[※※※※]如何用GCD同步若干個(gè)異步調(diào)用?(如根據(jù)若干個(gè)url異步加載多張圖片,然后在都下載完成后合成一張整圖)

[※※※※]dispatch_barrier_async的作用是什么?

[※※※※※]蘋(píng)果為什么要廢棄dispatch_get_current_queue?

[※※※※※]以下代碼運(yùn)行結(jié)果如何?

1

2

3

4

5

6

7

8

9- (void)viewDidLoad{? ? [superviewDidLoad];NSLog(@"1");dispatch_sync(dispatch_get_main_queue(), ^{NSLog(@"2");? ? });NSLog(@"3");}

[※※]addObserver:forKeyPath:options:context:各個(gè)參數(shù)的作用分別是什么,observer中需要實(shí)現(xiàn)哪個(gè)方法才能獲得KVO回調(diào)?

[※※※]如何手動(dòng)觸發(fā)一個(gè)value的KVO

[※※※]若一個(gè)類有實(shí)例變量NSString *_foo,調(diào)用setValue:forKey:時(shí),可以以foo還是_foo作為key?

[※※※※]KVC的keyPath中的集合運(yùn)算符如何使用?

[※※※※]KVC和KVO的keyPath一定是屬性么?

[※※※※※]如何關(guān)閉默認(rèn)的KVO的默認(rèn)實(shí)現(xiàn),并進(jìn)入自定義的KVO實(shí)現(xiàn)?

[※※※※※]apple用什么方式實(shí)現(xiàn)對(duì)一個(gè)對(duì)象的KVO?

[※※]IBOutlet連出來(lái)的視圖屬性為什么可以被設(shè)置成weak?

[※※※※※]IB中User Defined Runtime Attributes如何使用?

[※※※]如何調(diào)試BAD_ACCESS錯(cuò)誤

[※※※]lldb(gdb)常用的調(diào)試命令?


參考:

http://linqing-lu.github.io/blog/2015/07/16/ios-mian-shi-ti/

http://www.linuxidc.com/Linux/2014-03/97744.htm

http://blog.csdn.net/dqjyong/article/details/7668601

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,041評(píng)論 0 9
  • 【2017年最新】? iOS面試題及答案 設(shè)計(jì)模式是什么? 你知道哪些設(shè)計(jì)模式,并簡(jiǎn)要敘述? 設(shè)計(jì)模式是一種編碼經(jīng)...
    紫色冰雨閱讀 725評(píng)論 0 1
  • http://blog.csdn.net/david21984/article/details/57451917 ...
    紫色冰雨閱讀 662評(píng)論 0 0
  • 對(duì)于Java程序員來(lái)說(shuō),null是令人頭痛的東西。時(shí)常會(huì)受到空指針異常(NPE)的騷擾。連Java的發(fā)明者都承認(rèn)這...
    仁昌居士閱讀 254評(píng)論 0 0
  • 體驗(yàn)入:晚上在店宴請(qǐng)客人,餐中服務(wù)沒(méi)有連接,沒(méi)有主動(dòng)服務(wù),在想為什么服務(wù)一直提不上來(lái)? 找核心:任何問(wèn)題的出現(xiàn)都是...
    熊毅濱1349閱讀 240評(píng)論 0 0

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