成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

深度解析Objective-C筆試題

移動開發 iOS
本文介紹的是Objective-C筆試題,先來問一個,為什么很多內置類如UITableViewController的delegate屬性都是assign而不是retain的?看本文詳細詳細解答內容。

Objective-C筆試題是本文要介紹的內容,很詳細的講解寫的答案。大約有18個Objective-C問題供你參考學習,不多說,我們一起來看詳細解答!

1.Objective-C中,與alloc語義相反的方法是dealloc還是release?與retain語義相反的方法是dealloc還是release,為什么?需要與alloc配對使用的方法是dealloc還是release,為什么?

答:alloc與dealloc語意相反,alloc是創建變量,dealloc是釋放變量。 retain 對應release,retain 保留一個對象。調用之后,變量的計數加1?;蛟S不是很明顯,在這有例為證:

  1. - (void) setName : (NSString*) name {   
  2.      [name retain];   
  3.      [myname release];   
  4.      myname = name;   
  5. }  

我們來解釋一下:設想,用戶在調用這個函數的時候,他注意了內存的管理,所以他小心的寫了如下代碼:

  1. NSString * newname = [[NSString alloc] initWithString: @"John"];   
  2. [aClass setName: newname];   
  3. [newname release];  

我們來看一看newname的計數是怎么變化的。首先,它被alloc,count = 1; 然后,在setName中,它被retain, count = 2; ***,用戶自己釋放newname,count = 1,myname指向了newname。這也解釋了為什么需要調用[myname release]。我們需要在給myname賦新值的時候,釋放掉以前老的變量。retain 之后直接dealloc對象計數器沒有釋放。alloc 需要與release配對使用,因為alloc 這個函數調用之后,變量的計數加1。所以在調用alloc 之后,一定要調用對應的release。另外,在release一個變量之后,他的值仍然有效,所以***是后面緊接著再var = nil。

2.在一個對象的方法里面:

self.name = “object”;

name =”object”

有什么不同嗎? 

答:self.name = "object"會調用對象的setName()方法,name = "object"會直接把object賦值給當前對象的name 屬性。

[backcolor=transparent][backcolor=transparent]

3.這段代碼有什么問題嗎:

  1. [backcolor=transparent]@implementation Person   
  2. [backcolor=transparent]- (void)setAge:(int)newAge {   
  3. [backcolor=transparent]self.age = newAge;   
  4. [backcolor=transparent]}   
  5. [backcolor=transparent]  
  6. @end  

答:會進入死循環。

4.什么是retain count?

答:引用計數(ref count或者retain count)。對象的內部保存一個數字,表示被引用的次數。例如,某個對象被兩個指針所指向(引用)那么它的retain count為2。需要銷毀對 象的時候,不直接調用dealloc,而是調用release。release會 讓retain count減1,只有retain count等于0,系統才會調用dealloc真正銷毀這個對象。

5.以下每行代碼執行后,person對象的retain count分別是多少

  1. Person *person = [[Person alloc] init]; count 1   
  2. [person retain]; count 2   
  3. [person release];count 1   
  4. [person release];retain count = 1;  

6.為什么很多內置類如UITableViewController的delegate屬性都是assign而不是retain的?

答:會引起循環引用。

7.定義屬性時,什么情況使用copy,assign,和retain 。

答:assign用于簡單數據類型,如NSInteger,double,bool,retain 和copy用戶對象,copy用于當 a指向一個對象,b也想指向同樣的對象的時候,如果用assign,a如果釋放,再調用b會crash,如果用copy 的方式,a和b各自有自己的內存,就可以解決這個問題。retain 會使計數器加一,也可以解決assign的問題。另外:atomic和nonatomic用來決定編譯器生成的getter和setter是否為原子操作。在多線程環境下,原子操作是必要的,否則有可能引起錯誤的結果。加了atomic,setter函數會變成下面這樣:

  1. if (property != newValue) {    
  2.      [property release];         
  3.      property = [newValue retain];    
  4.  }    

8.的對象是在什么時候被release的?

答:autorelease實際上只是把對release的調用延遲了,對于每一個Autorelease,系統只是把該Object放入了當前的Autorelease pool中,當該pool被釋放時,該pool中的所有Object會被調用Release。對于每一個Runloop,系統會隱式創建一個Autorelease pool,這樣所有的release pool會構成一個象CallStack一樣的一個棧式結構,在每一個Runloop結束時,當前棧頂的Autorelease pool會被銷毀,這樣這個pool里的每個Object(就是autorelease的對象)會被release。那什么是一個Runloop呢?一個UI事件,Timer call, delegate call, 都會是一個新的Runloop。那什么是一個Runloop呢?一個UI事件,Timer call, delegate call,都會是一個新的Runloop。

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

  1. for (int i = 0; i < someLargeNumber; i++)   
  2. {   
  3. NSString *string = @”Abc”;   
  4. string = [string lowercaseString];   
  5. string = [string stringByAppendingString:@"xyz"];   
  6. NSLog(@“%@”, string);   
  7. }  

答:會內存泄露,

  1. for(int i = 0; i<1000;i++){   
  2. NSAutoreleasePool * pool1 = [[NSAutoreleasePool alloc] init];   
  3. NSString *string = @"Abc";   
  4. string = [string lowercaseString];   
  5. string = [string stringByAppendingString:@"xyz"];   
  6. NSLog(@"%@",string);   
  7. [pool1 drain];   
  8. }  

10.autorelease和垃圾回收機制(gc)有什么關系?

答案:不懂

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

沒有

12.什么是Notification?

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

13.什么時候用delegate,什么時候用Notification?

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

14.什么是KVC和KVO?

答:KVC(Key-Value-Coding)內部的實現:一個對象在調用setValue的時候,(1)首先根據方法名找到運行方法的時候所需要的環境參數。(2)他會從自己isa指針結合環境參數,找到具體的方法實現的接口。(3)再直接查找得來的具體的方法實現。KVO(Key-Value-Observing):當觀察者為一個對象的屬性進行了注冊,被觀察對象的isa指針被修改的時候,isa指針就會指向一個中間類,而不是真實的類。所以isa指針其實不需要指向實例對象真實的類。所以我們的程序***不要依賴于isa指針。在調用類的方法的時候,***要明確對象實例的類名。

15.Notification和KVO有什么不同?

答:不知道

16.KVO在Objective-C中是怎么實現的?

答:不知道

17.ViewController 的 loadView, viewDidLoad, viewDidUnload 分別是在什么時候調用的?在自定義ViewController的時候這幾個函數里面應該做什么工作?

答:viewDidLoad在view 從nib文件初始化時調用,loadView在controller的view為nil時調用。此方法在編程實現view時調用,view 控制器默認會注冊memory warning notification,當view controller的任何view 沒有用的時候,viewDidUnload會被調用,在這里實現將retain 的view release,如果是retain的IBOutlet view 屬性則不要在這里release,IBOutlet會負責release 。

18.ViewController 的 didReceiveMemoryWarning 是在什么時候被調用的?默認的操作是什么?

答:默認調用[super didReceiveMemoryWarning] 

小結:深度解析Objective-C筆試題的內容介紹完了,希望本文對你有所幫助!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-08-15 14:02:36

Objective-C

2011-07-29 16:08:31

Objective-C 內存

2011-08-10 18:07:29

Objective-C反射

2013-03-27 12:54:00

iOS開發Objective-C

2011-08-05 15:46:32

Objective-C 程序設計

2013-06-20 10:40:32

Objective-C實現截圖

2011-05-11 15:58:34

Objective-C

2011-05-11 11:20:26

Objective-C

2011-08-04 15:52:48

Objective-C HTML

2011-05-11 13:54:08

Objective-C

2011-05-11 15:45:50

內存管理Objective-C

2011-08-02 13:16:36

Objective-C 語法 函數

2011-08-04 11:15:46

Objective-C 構造函數 構造方法

2011-05-11 14:06:49

Objective-C

2011-08-04 14:58:37

Objective-C Cocoa NSString

2013-08-21 14:57:42

objective-c問題

2011-08-03 16:55:05

Objective-C 代理

2011-08-04 09:35:09

Objective-C 編碼規范

2014-04-30 10:16:04

Objective-CiOS語法

2014-06-25 14:02:59

Objective-CKVO
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美亚洲国产一区二区三区 | 国产日韩精品久久 | 一区二区三区免费观看 | 97超碰在线免费 | 日本成人在线观看网站 | 瑞克和莫蒂第五季在线观看 | 欧美日韩专区 | 久久精品国产一区二区三区 | 亚洲成人毛片 | 99热播精品 | 国产乱码精品一区二区三区忘忧草 | 午夜免费成人 | 久久久久久久久久久久91 | 福利网址| www.激情.com | 一区二区免费视频 | 国产精品日韩高清伦字幕搜索 | av永久| 一级毛毛片 | 久久a久久| 午夜精品在线观看 | 午夜黄色 | 91免费在线看 | 成人不卡一区二区 | 午夜精品视频在线观看 | 一区二区三区精品视频 | 欧美成人精品在线 | 羞羞免费网站 | 欧美成人自拍视频 | 日韩综合在线视频 | 另类 综合 日韩 欧美 亚洲 | 亚洲精品视频免费 | 欧美一区二区三区在线看 | 精品一区二区三区四区视频 | 国产综合av | 国产亚洲精品成人av久久ww | 狠狠干网站 | 在线一区二区三区 | 97精品一区二区 | 视频一区在线观看 | 一级片免费在线观看 |