午夜精品福利视频,亚洲激情专区,免费看a网站,aa毛片,亚洲色图激情小说,亚洲一级毛片,免费一级毛片一级毛片aa

iPhone軟件開發(fā)面試題(5)

時(shí)間:2024-08-23 22:35:46 學(xué)人智庫 我要投稿
  • 相關(guān)推薦

iPhone軟件開發(fā)面試題(5)

  41.對(duì)象是在什么時(shí)候被release的?

iPhone軟件開發(fā)面試題(5)

  答:autorelease實(shí)際上只是把對(duì)release的調(diào)用延遲了,對(duì)于每一個(gè)Autorelease,系統(tǒng)只是把該Object放入了當(dāng)前的Autorelease pool中,當(dāng)該pool被釋放時(shí),該pool中的所有Object會(huì)被調(diào)用Release。對(duì)于每一個(gè)Runloop,系統(tǒng)會(huì)隱式創(chuàng)建一個(gè)Autorelease pool,這樣所有的release pool會(huì)構(gòu)成一個(gè)象CallStack一樣的一個(gè)棧式結(jié)構(gòu),在每一個(gè)Runloop結(jié)束時(shí),當(dāng)前棧頂?shù)腁utorelease pool會(huì)被銷毀,這樣這個(gè)pool里的每個(gè)Object(就是autorelease的對(duì)象)會(huì)被release。那什么是一個(gè)Runloop呢?一個(gè)UI事件,Timer call, delegate call, 都會(huì)是一個(gè)新的Runloop。

  42.這段代碼有什么問題,如何修改

  for (int i = 0; i

  {

  NSString *string = @”Abc”;

  string = [string lowercaseString];

  string = [string stringByAppendingString:@"xyz"];

  NSLog(@“%@”, string);

  }

  答:會(huì)內(nèi)存泄露,

  for(int i = 0; i<1000;i ){

  NSAutoreleasePool * pool1 = [[NSAutoreleasePool alloc] init];

  NSString *string = @"Abc";

  string = [string lowercaseString];

  string = [string stringByAppendingString:@"xyz"];

  NSLog(@"%@",string);

  [pool1 drain];

  }

  43.autorelease和垃圾回收機(jī)制(gc)有什么關(guān)系?

  44.IPhone OS有沒有垃圾回收(gc)?

  答:沒有。

  45.什么是Notification?

  答:觀察者模式,controller向defaultNotificationCenter添加自己的notification,其他類注冊(cè)這個(gè)notification就可以收到通知,這些類可以在收到通知時(shí)做自己的操作(多觀察者默認(rèn)隨機(jī)順序發(fā)通知給觀察者們,而且每個(gè)觀察者都要等當(dāng)前的某個(gè)觀察者的操作做完才能輪到他來操作,可以用NotificationQueue的方式安排觀察者的反應(yīng)順序,也可以在添加觀察者中設(shè)定反映時(shí)間,取消觀察需要在viewDidUnload 跟dealloc中都要注銷)。參考鏈接:http://useyourloaf.com/blog/2010/6/6/delegation-or-notification.html

  46.什么時(shí)候用delegate,什么時(shí)候用Notification?

  答:delegate針對(duì)one-to-one關(guān)系,并且reciever可以返回值給sender,notification 可以針對(duì)one-to-one/many/none,reciever無法返回值給sender.所以,delegate用于sender希望接受到reciever的某個(gè)功能反饋值,notification用于通知多個(gè)object某個(gè)事件。

  47.什么是KVC和KVO?

  答:KVC(Key-Value-Coding)內(nèi)部的實(shí)現(xiàn):一個(gè)對(duì)象在調(diào)用setValue的時(shí)候,(1)首先根據(jù)方法名找到運(yùn)行方法的時(shí)候所需要的環(huán)境參數(shù)。(2)他會(huì)從自己isa指針結(jié)合環(huán)境參數(shù),找到具體的方法實(shí)現(xiàn)的接口。(3)再直接查找得來的具體的方法實(shí)現(xiàn)。

  KVO(Key-Value-Observing):當(dāng)觀察者為一個(gè)對(duì)象的屬性進(jìn)行了注冊(cè),被觀察對(duì)象的isa指針被修改的時(shí)候,isa指針就會(huì)指向一個(gè)中間類,而不是真實(shí)的類。所以isa指針其實(shí)不需要指向?qū)嵗龑?duì)象真實(shí)的類。所以我們的程序最好不要依賴于isa指針。在調(diào)用類的方法的時(shí)候,最好要明確對(duì)象實(shí)例的類名。

  48.Notification和KVO有什么不同?

  49.KVO在ObjC中是怎么實(shí)現(xiàn)的?

  50.ViewController 的 loadView,viewDidLoad, viewDidUnload 分別是在什么時(shí)候調(diào)用的?在自定義ViewController的時(shí)候這幾個(gè)函數(shù)里面應(yīng)該做什么工作?

  答:viewDidLoad在view 從nib文件初始化時(shí)調(diào)用,loadView在controller的view為nil時(shí)調(diào)用。此方法在編程實(shí)現(xiàn)view時(shí)調(diào)用,view 控制器默認(rèn)會(huì)注冊(cè)memory warning notification,當(dāng)view controller的任何view 沒有用的時(shí)候,viewDidUnload會(huì)被調(diào)用,在這里實(shí)現(xiàn)將retain 的view release,如果是retain的IBOutlet view 屬性則不要在這里release,IBOutlet會(huì)負(fù)責(zé)release 。

  51.ViewController 的 didReceiveMemoryWarning 是在什么時(shí)候被調(diào)用的?默認(rèn)的操作是什么?

  答:默認(rèn)調(diào)用[superdidReceiveMemoryWarning]

http://www.stanzs.com/

【iPhone軟件開發(fā)面試題(5)】相關(guān)文章:

iPhone軟件開發(fā)面試題10-23

Microsoft面試題09-04

iOS面試題07-10

公司面試題09-12

iphone鎖屏密碼忘了怎么辦07-10

hibernate面試題10-18

英語面試題精選06-13

小升初面試題06-10

PHP面試題10-14

小升初面試題型08-24