ios開發工程師筆試基礎題


參考:http://www.cnblogs.com/duchengdong/archive/2012/03/30/2425300.html

1、

main() 
 {  
   int a[5]={1,2,3,4,5};  
   int *ptr=(int *)(&a+1);   
   printf("%d,%d",*(a+1),*(ptr-1)); 
} 

答案:2、5

分析:*(a+1)即a[1],為2;&a+1不是首地址+1,系統會認為加一個a數組的偏移,是偏移了一個數組的大小(本例是5個int) 
  int *ptr=(int *)(&a+1); 
  則ptr實際是&(a[5]),也就是a+5

2、用預處理指令#define聲明一個常數,用以表明一年都多少秒(忽略閏年的情況)

#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 

#define的基本語法知識(不能以分號結尾、括號的使用等)

懂得預處理器將為你計算常數表達式的值

意識到這個表達式將使一個16位機的整型數據溢出,因此要使用到長整型符號L,告訴編譯器這個常數為長整型數

如果在表達式中用到了UL(表示無符號整型)

3、寫一個標准的宏MIN,這個宏輸入兩個參數並返回較小的一個

#define MIN(A,B) ((A) <= (B) ? (A) : (B))  

4、寫一個NSString類的實現

+ (id)initWithCString:(const char *)nullTerminatedCString encoding:(NSStringEncoding)encoding; 
+ (id) stringWithCString: (const char*)nullTerminatedCString  
            encoding: (NSStringEncoding)encoding 
{ 
  NSString  *obj; 
  obj = [self allocWithZone: NSDefaultMallocZone()]; 
  obj = [obj initWithCString: nullTerminatedCString encoding: encoding]; 
  return AUTORELEASE(obj); 
} 

5、obj-c有多重繼承嗎?不是的話有什么替代方法?

沒有,多繼承在cocoa中使用protocol委托來實現

6、obj-c有私有方法嗎?是有變量呢?

方法只有兩種:靜態方法和實例方法,默認為公有。

變量:私有、保護和公有。默認為私有。

 

@interface Controller : NSObject { NSString *something; } 
+ (void)thisIsAStaticMethod; 
- (void)thisIsAnInstanceMethod; 
@end 
@interface Controller (private) - 
(void)thisIsAPrivateMethod; 
@end

可以通過上述方法來實現方法的私有化

7、關鍵字const有什么含意?修飾類呢?static的作用?用於類呢?還有extern C的作用

  • const意味着只讀

       const int a;   a為一個常整型數

       int const a;   同上,a為一個常整型數

       const int *a; a為指向常整型數的指針(即整型數不可修改,但是指針可以)

       int* const a; a為指向整型數的常指針(即整型數可以修改,但是指針不可修改)

       int const *a const; a為一個指向常整數的常指針

  • static關鍵字作用

(1)函數體內 static 變量的作用范圍為該函數體,不同於 auto 變量,該變量的內存只被分配一次,因此其值在下次調用時仍維持上次的值;

(2)在模塊內的 static 全局變量可以被模塊內所用函數訪問,但不能被模塊外其它函數訪問;

(3)在模塊內的 static 函數只可被這一模塊內的其它函數調用,這個函數的使用范圍被限制在聲明它的模塊內;

(4)在類中的 static 成員變量屬於整個類所擁有,對類的所有對象只有一份拷貝;

(5)在類中的 static 成員函數屬於整個類所擁有,這個函數不接收 this 指針,因而只能訪問類的static 成員變量。 

  • extern "C"的作用

(1)被 extern "C"限定的函數或變量是 extern 類型的;

 extern 是 C/C++語言中表明函數和全局變量作用范圍(可見性)的關鍵字,該關鍵字告訴編譯器, 
其聲明的函數和變量可以在本模塊或其它模塊中使用。

(2)被 extern "C"修飾的變量和函數是按照 C 語言方式編譯和連接的;

  • extern "C"的慣用法  
(1)在 C++中引用 C 語言中的函數和變量,在包含 C 語言頭文件(假設為 cExample.h)時,需進 
行下列處理: 
extern "C"  
{  
#include "cExample.h"  
}  
而在 C 語言的頭文件中,對其外部函數只能指定為 extern 類型,C 語言中不支持 extern "C"聲明, 
在.c 文件中包含了 extern "C"時會出現編譯語法錯誤。 
(2)在 C 中引用 C++語言中的函數和變量時,C++的頭文件需添加 extern "C",但是在 C 語言中不 
能直接引用聲明了 extern "C"的該頭文件,應該僅將 C 文件中將 C++中定義的 extern "C"函數聲明為 
extern 類型。

8、框架分類

  • 音頻和視頻

         Core Audio

         OpenAL

         Media Library

        AVFoundation

  • 數據管理

        Core Data

        SQLite

  • 圖片和動畫

        Core Animation

        OpenGL ES

        Quartz 2D

  • 網絡

        Bonjour

        WebKit

        BSD Sockets

  • 用戶應用

        Address Book

        Core Location

        Map Kit

        Store Kit

9、obj-c的優缺點

     obj-c優點:

    1)Cateogies

    2)Posting

    3)動態識別

    4)指標計算

    5)彈性訊息傳遞

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

    7)obj-c與c++可混合編程

    obj-c缺點:

    1)不支持命名空間

    2)不支持運算符重載

    3)不支持多重繼承

    4)使用動態運行時類型,所有方法都是函數調用,所以很多編譯時優化方法都用不到。

 10、關鍵字volatile有什么含意?並給出三個不同的例子。

一個定義為volatile的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設這個變量的值了。精確的說就是,優化器在用到這個變量時必須每次都小心地重新讀取這個變量的值,而不是使用保存在寄存器里的備份。下面是volatile變量的幾個例子:

1、並行設備的硬件寄存器(如:狀態寄存器)

2、一個中斷服務子程序會訪問到的非自動變量

3、多線程應用中被幾個任務共享的變量

11、簡述堆和棧的區別

棧是編譯器自動管理,堆是程序員控制的。

棧是一塊連續的內存區域,是向低地址擴展的數據結構,堆是向高地址擴展的數據結構,是不連續的用鏈表存儲的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM