日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

深度解析Objective-C笔试题

發布時間:2025/7/14 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度解析Objective-C笔试题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2011-08-11 17:39 佚名 互聯網?字號:T?|?T

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

AD:干貨來了,不要等!WOT2015 北京站演講PPT開放下載!

?

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。或許不是很明顯,在這有例為證:

  • -?(void)?setName?:?(NSString*)?name?{? ?
  • ?????[name?retain];? ?
  • ?????[myname?release];? ?
  • ?????myname?=?name;? ?
  • }??
  • 我們來解釋一下:設想,用戶在調用這個函數的時候,他注意了內存的管理,所以他小心的寫了如下代碼:

  • NSString?*?newname?=?[[NSString?alloc]?initWithString:?@"John"];? ?
  • [aClass?setName:?newname];? ?
  • [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.這段代碼有什么問題嗎:

  • [backcolor=transparent]@implementation?Person? ?
  • [backcolor=transparent]-?(void)setAge:(int)newAge?{? ?
  • [backcolor=transparent]self.age?=?newAge;? ?
  • [backcolor=transparent]}? ?
  • [backcolor=transparent] ?
  • @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分別是多少

  • Person?*person?=?[[Person?alloc]?init];?count?1? ?
  • [person?retain];?count?2? ?
  • [person?release];count?1? ?
  • [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函數會變成下面這樣:

  • if?(property?!=?newValue)?{?? ?
  • ?????[property?release];??????? ?
  • ?????property?=?[newValue?retain];?? ?
  • ?}????
  • 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.這段代碼有什么問題,如何修改

  • for?(int?i?=?0;?i?<?someLargeNumber;?i++)? ?
  • {? ?
  • NSString?*string?=?@”Abc”;? ?
  • string?=?[string?lowercaseString];? ?
  • string?=?[string?stringByAppendingString:@"xyz"];? ?
  • NSLog(@“%@”,?string);? ?
  • }??
  • 答:會內存泄露,

  • 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];? ?
  • }??
  • 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筆試題的內容介紹完了,希望本文對你有所幫助!

    轉載于:https://www.cnblogs.com/lihaibo-Leao/p/4447384.html

    總結

    以上是生活随笔為你收集整理的深度解析Objective-C笔试题的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 成人91看片 | 好吊妞在线观看 | 青青草综合 | 一本大道久久a久久综合婷婷 | 在线免费视频一区二区 | 胖女人做爰全过程 | 我的丝袜美腿尤物麻麻 | 亚洲天堂免费在线 | 亚洲av无码国产精品久久不卡 | 激情网五月 | 极品白嫩的小少妇 | 国产精品女人精品久久久天天 | 夜噜噜 | 美女扒开内裤让男人捅 | 日韩成人av一区二区 | 另类ts人妖一区二区三区 | 精品中文字幕一区二区 | 日韩欧美精品一区二区 | 隔壁邻居是巨爆乳寡妇 | 亚洲欧美一区二区三区在线 | 免费一级特黄毛大片 | av网子| 亚洲视频自拍偷拍 | 麻豆免费在线观看视频 | 亚洲xx网 | 男性影院 | 日本免费观看视频 | 日韩 欧美 自拍 | 成人人伦一区二区三区 | 狠狠操人人干 | 青娱乐最新视频 | 天干夜夜爽爽日日日日 | 青草一区二区 | 国产乱码精品一区二区三区忘忧草 | 波多野吉衣视频在线观看 | 大奶子在线 | 国产成人精品网站 | 另类小说欧美 | 人人模人人干 | 暖暖av在线 | 啪啪av网| 日韩专区在线 | 天堂√在线 | 久久av无码精品人妻出轨 | 国产资源视频 | 丰满人妻熟女aⅴ一区 | 熟妇五十路六十路息与子 | 老湿福利影院 | 欧美福利专区 | 国产色婷婷一区二区三区竹菊影视 | 成人午夜免费视频 | 91午夜交换视频 | 欧美乱轮视频 | 免费a网站 | 99久久国产宗和精品1上映 | 日本网站黄色 | 国产免费一区二区三区 | 欧美激情一区二区三区在线 | 性色av浪潮av | 久操av| 久久久精品人妻av一区二区三区 | 黄色国产一区二区 | 激情婷 | 国产成人高清在线 | av网址免费在线观看 | 四虎一国产精品一区二区影院 | 欧美aⅴ在线 | 蜜桃一区二区三区 | 性生生活大片又黄又 | 青青青青操 | 一级片aaa | 午夜国产一级 | 黄色片免费 | 午夜精品福利在线观看 | 国产精品一区二区免费在线观看 | 邵氏电影《金莲外传2》免费观看 | 国产xxx | 深夜福利视频网站 | 国产午夜精品理论片在线 | 中国在线观看视频高清免费 | 九一成人网 | 麻豆影视在线观看 | 男受被做哭激烈娇喘gv视频 | 特色特色大片在线 | 精品国产乱码久久久久久蜜臀 | 成年人网站在线免费观看 | 亚洲av无码乱码在线观看性色 | 国产激情视频一区二区三区 | 天天噜 | 99日韩 | 久久久久久无码精品大片 | 亚洲av无码一区二区三区在线 | 成人av网址在线观看 | 欧美日韩国| 在线精品亚洲欧美日韩国产 | 亚洲一 | 五月99久久婷婷国产综合亚洲 | 精品人妻无码一区二区三区蜜桃一 | 亚洲专区在线播放 |