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

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

時(shí)間:2024-05-22 14:24:56 學(xué)人智庫(kù) 我要投稿
  • 相關(guān)推薦

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

  31.動(dòng)態(tài)綁定

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

  在運(yùn)行時(shí)確定要調(diào)用的方法,動(dòng)態(tài)綁定將調(diào)用方法的確定也推遲到運(yùn)行時(shí)。在編譯時(shí),方法的調(diào)用并不和代碼綁定在一起,只有在消息發(fā)送出來之后,才確定被調(diào)用的代碼。通過動(dòng)態(tài)類型和動(dòng)態(tài)綁定技術(shù),您的代碼每次執(zhí)行都可以得到不同的結(jié)果。運(yùn)行時(shí)因子負(fù)責(zé)確定消息的接收者和被調(diào)用的方法。運(yùn)行時(shí)的消息分發(fā)機(jī)制為動(dòng)態(tài)綁定提供支持。當(dāng)您向一個(gè)動(dòng)態(tài)類型確定了的對(duì)象發(fā)送消息時(shí),運(yùn)行環(huán)境系統(tǒng)會(huì)通過接收者的isa指針定位對(duì)象的類,并以此為起點(diǎn)確定被調(diào)用的方法,方法和消息是動(dòng)態(tài)綁定的。而且,您不必在Objective-C 代碼中做任何工作,就可以自動(dòng)獲取動(dòng)態(tài)綁定的好處。您在每次發(fā)送消息時(shí),特別是當(dāng)消息的接收者是動(dòng)態(tài)類型已經(jīng)確定的對(duì)象時(shí),動(dòng)態(tài)綁定就會(huì)例行而透明地發(fā)生。

  32.obj-c 的優(yōu)缺點(diǎn)

  Obj-c優(yōu)點(diǎn):

  1) Cateogies

  2) Posing

  3) 動(dòng)態(tài)識(shí)別

  4) 指標(biāo)計(jì)算

  5) 彈性訊息傳遞

  6) 不是一個(gè)過度復(fù)雜的 C 衍生語(yǔ)言

  7) Objective-C 與 C 可混合編程?

  Obj-c缺點(diǎn):

  1)不支持命名空間

  2)不支持運(yùn)算符重載

  3)不支持多重繼承

  4)使用動(dòng)態(tài)運(yùn)行時(shí)類型,所有的方法都是函數(shù)調(diào)用,所以很多編譯時(shí)優(yōu)化方法都用不到。(如內(nèi)聯(lián)函數(shù)等),性能低劣。

  33.sprintf,strcpy,memcpy使用上有什么要注意的地方

  strcpy是一個(gè)字符串拷貝的函數(shù),它的函數(shù)原型為strcpy(char *dst, const char *src);

  將 src開始的一段字符串拷貝到dst開始的內(nèi)存中去,結(jié)束的標(biāo)志符號(hào)為 '\0',由于拷貝的長(zhǎng)度不是由我們自己控制的,所以這個(gè)字符串拷貝很容易出錯(cuò)。具備字符串拷貝功能的函數(shù)有memcpy,這是一個(gè)內(nèi)存拷貝函數(shù),它的函數(shù)原型為memcpy(char *dst,const char* src, unsigned int len);

  將長(zhǎng)度為len的一段內(nèi)存,從src拷貝到dst中去,這個(gè)函數(shù)的長(zhǎng)度可控。但是會(huì)有內(nèi)存疊加的問題。

  sprintf是格式化函數(shù)。將一段數(shù)據(jù)通過特定的格式,格式化到一個(gè)字符串緩沖區(qū)中去。sprintf格式化的函數(shù)的長(zhǎng)度不可控,有可能格式化后的字符串會(huì)超出緩沖區(qū)的大小,造成溢出。

  34. 用變量a給出下面的定義

  a)一個(gè)整型數(shù)(An integer)

  b)一個(gè)指向整型數(shù)的指針( A pointer to an integer)

  c)一個(gè)指向指針的的指針,它指向的指針是指向一個(gè)整型數(shù)( A pointer to a pointer to an intege)r

  d)一個(gè)有10個(gè)整型數(shù)的數(shù)組( An array of 10 integers)

  e)一個(gè)有10個(gè)指針的數(shù)組,該指針是指向一個(gè)整型數(shù)的。(An array of 10 pointers to integers)

  f)一個(gè)指向有10個(gè)整型數(shù)數(shù)組的指針( A pointer to an array of 10 integers)

  g)一個(gè)指向函數(shù)的指針,該函數(shù)有一個(gè)整型參數(shù)并返回一個(gè)整型數(shù)(A pointer to a function that takes an integer as anargument? and returns an integer)

  h)一個(gè)有10個(gè)指針的數(shù)組,該指針指向一個(gè)函數(shù),該函數(shù)有一個(gè)整型參數(shù)并返回一個(gè)整型數(shù)( An array of ten pointersto functions t?hat take an integer argument and returnan integer ) ? ?

  答案:

  a) int a; // An integer

  b) int *a; // A pointer to an integer

  c) int **a; // A pointer to a pointer to an integer

  d) int a[10]; // An array of 10 integers

  e) int *a[10]; // An array of 10 pointers to integers

  f) int (*a)[10]; // A pointer to an array of 10 integers

  g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer

  h) int (*a[10])(int); // An array of 10 pointers tofunctions that take an integer argument and return an integer

  35.readwrite ,readonly ,assign ,retain ,copy,nonatomic 屬性的作用

  @property是 一個(gè)屬性訪問聲明,擴(kuò)號(hào)內(nèi)支持以下幾個(gè)屬性:

  1、getter=getterName,setter=setterName,設(shè)置setter與 getter的方法名

  2、readwrite,readonly,設(shè)置可供訪問級(jí)別

  3、assign,setter方法直接賦值,不進(jìn)行 任何retain操作,為了解決原類型與環(huán)循引用問題

  4、retain,setter方法對(duì)參數(shù)進(jìn)行release舊值再retain新值,所有 實(shí)現(xiàn)都是這個(gè)順序(CC上有相關(guān)資料)

  5、copy,setter方法進(jìn)行Copy操作,與retain處理流程一樣,先舊值release,再 Copy出新的對(duì)象,retainCount為1。這是為了減少對(duì)上下文的依賴而引入的機(jī)制。

  6、nonatomic,非原子性訪問,不加同步,多線程并發(fā)訪問會(huì)提高性能。注意,如果不加此屬性,則默認(rèn)是兩個(gè)訪問方法都為原子型事務(wù)訪問。鎖被加到所屬對(duì)象實(shí)例級(jí)(我是這么理解的...)。?@synthesize xxx; 來實(shí)現(xiàn)實(shí)際代碼

  36.ObjC中,與alloc語(yǔ)義相反的方法是dealloc還是release?與retain語(yǔ)義相反的方法是dealloc還是release,為什么?需要與alloc配對(duì)使用的方法是dealloc還是release,為什么?

  答:alloc與dealloc語(yǔ)意相反,alloc是創(chuàng)建變量,dealloc是釋放變量。 retain 對(duì)應(yīng)release,retain 保留一個(gè)對(duì)象。調(diào)用之后,變量的計(jì)數(shù)加1;蛟S不是很明顯,

  在這有例為證:

  - (void) setName: (NSString*) name {

  [name retain];

  [myname release];

  myname = name;

  }

  我們來解釋一下:設(shè)想,用戶在調(diào)用這個(gè)函數(shù)的時(shí)候,他注意了內(nèi)存的管理,所以他小心的寫了如下代碼:

  NSString * newname = [[NSString alloc] initWithString: @"John"];

  [aClass setName: newname];

  [newname release];

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

  37.什么是retaincount?

  答:引用計(jì)數(shù)(refcount或者retain count)。對(duì)象的內(nèi)部保存一個(gè)數(shù)字,表示被引用的次數(shù)。例如,某個(gè)對(duì)象被兩個(gè)指針?biāo)赶?引用)那么它的retain count為2。需要銷毀對(duì)象的時(shí)候,不直接調(diào)用dealloc,而是調(diào)用release。release會(huì)讓retain count減1,只有retaincount等于0,系統(tǒng)才會(huì)調(diào)用dealloc真正銷毀這個(gè)對(duì)象。

  38.以下每行代碼執(zhí)行后,person對(duì)象的retain count分別是多少

  Person *person =[[Person alloc] init]; count 1

  [person retain]; count 2

  [person release];count 1

  [person release];retain count = 1;

  39.為什么很多內(nèi)置類如UITableViewController的delegate屬性都是assign而不是retain的?

  答:會(huì)引起循環(huán)引用。

  40.定義屬性時(shí),什么情況使用copy,assign ,和retain

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

  if (property != newValue)

  {

  [property release];

  property = [newValue retain];

  }

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

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

Microsoft面試題09-04

iOS面試題07-10

公司面試題09-12

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

hibernate面試題10-18

英語(yǔ)面試題精選06-13

小升初面試題06-10

PHP面試題10-14

小升初面試題型08-24