最新高清无码专区,无人区码一码二码w358cc,99在线精品国自产拍不卡,亚洲国产欧美在线成人APP,男人天堂a在线,亚洲熟妇色,伊人毛片,国产精品亚洲mnbav网站

iPhone軟件開發面試題(4)

時間:2024-05-22 14:24:56 學人智庫

iPhone軟件開發面試題(4)

  31.動態綁定

iPhone軟件開發面試題(4)

  在運行時確定要調用的方法,動態綁定將調用方法的確定也推遲到運行時。在編譯時,方法的調用并不和代碼綁定在一起,只有在消息發送出來之后,才確定被調用的代碼。通過動態類型和動態綁定技術,您的代碼每次執行都可以得到不同的結果。運行時因子負責確定消息的接收者和被調用的方法。運行時的消息分發機制為動態綁定提供支持。當您向一個動態類型確定了的對象發送消息時,運行環境系統會通過接收者的isa指針定位對象的類,并以此為起點確定被調用的方法,方法和消息是動態綁定的。而且,您不必在Objective-C 代碼中做任何工作,就可以自動獲取動態綁定的好處。您在每次發送消息時,特別是當消息的接收者是動態類型已經確定的對象時,動態綁定就會例行而透明地發生。

  32.obj-c 的優缺點

  Obj-c優點:

  1) Cateogies

  2) Posing

  3) 動態識別

  4) 指標計算

  5) 彈性訊息傳遞

  6) 不是一個過度復雜的 C 衍生語言

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

  Obj-c缺點:

  1)不支持命名空間

  2)不支持運算符重載

  3)不支持多重繼承

  4)使用動態運行時類型,所有的方法都是函數調用,所以很多編譯時優化方法都用不到。(如內聯函數等),性能低劣。

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

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

  將 src開始的一段字符串拷貝到dst開始的內存中去,結束的標志符號為 '\0',由于拷貝的長度不是由我們自己控制的,所以這個字符串拷貝很容易出錯。具備字符串拷貝功能的函數有memcpy,這是一個內存拷貝函數,它的函數原型為memcpy(char *dst,const char* src, unsigned int len);

  將長度為len的一段內存,從src拷貝到dst中去,這個函數的長度可控。但是會有內存疊加的問題。

  sprintf是格式化函數。將一段數據通過特定的格式,格式化到一個字符串緩沖區中去。sprintf格式化的函數的長度不可控,有可能格式化后的字符串會超出緩沖區的大小,造成溢出。

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

  a)一個整型數(An integer)

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

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

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

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

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

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

  h)一個有10個指針的數組,該指針指向一個函數,該函數有一個整型參數并返回一個整型數( 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是 一個屬性訪問聲明,擴號內支持以下幾個屬性:

  1、getter=getterName,setter=setterName,設置setter與 getter的方法名

  2、readwrite,readonly,設置可供訪問級別

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

  4、retain,setter方法對參數進行release舊值再retain新值,所有 實現都是這個順序(CC上有相關資料)

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

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

  36.ObjC中,與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。

  37.什么是retaincount?

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

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

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

  [person retain]; count 2

  [person release];count 1

  [person release];retain count = 1;

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

  答:會引起循環引用。

  40.定義屬性時,什么情況使用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];

  }

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

iPhone軟件開發面試題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