ios若干問題總結

1.簡述OC中內存管理機制。與retain配對使用的方法是dealloc還是release,爲什麼?需要與alloc配對使用的方法是dealloc還是release,爲什麼?readwrite,readonly,assign,retain,copy,nonatomic 、atomic、strong、weak屬性的作用

引用計數機制進行內存管理。 
dealloc  release 因爲retain就要銷燬  創建就要釋放 
readwtite : 可讀寫(設置器和訪問器)   readonly : 只讀(訪問器)     assign : 只做賦值  
retain對應的是release,內存的釋放用release.
alloc對應的是dealloc,內存的銷燬用dealloc
 readwrite此標記說明屬性會被當成讀寫的,這也是默認屬性
readonly此標記說明屬性只可以讀,也就是不能設置,可以獲取。
 assign不會使引用計數加1,也就是直接賦值。
 retain會使引用計數加1。
 copy建立一個索引計數爲1的對象,在賦值時使用傳入值的一份拷貝。
nonatomic:非原子性訪問,多線程併發訪問會提高性能。
atomic:原子性訪問。
strong:打開ARC時纔會使用,相當於retain
weak:打開ARC時纔會使用,相當於assign,可以把對應的指針變量置爲nil



2.類變量中的@protected ,@private,@public,@package,聲明各有什麼含義?

@protected : 受保護的,自己和子類可以調用 
@private : 私有的, 只有自己可以調用 

@public : 公共的, 全局都可以調用 

@package : 本包內使用,跨包不可以

3.線程是什麼?進程是什麼?二者有什麼區別和聯繫

線程,有時稱爲輕量級進程,是被系統獨立調度和CPU的基本運行單位。        

 進程是操作系統中可以並行工作的基本單位。 
 一個應用程序裏至少有一個進程,一個進程裏至少有一個線程

4.談談你對多線程開發的理解?ios中有幾種實現多線程的方法?

在一個進程中有多個線程,每個線程有自己單獨的任務 
  優點: 效率快   缺點: 不安全,耗費資源       

有三種:

  第一種,使用@synchronized(self) 
  第二種,使用GCD 
  第三種,使用NSOperationQueue

5.多線程同步和異步的區別?IOS中如何實現多線程的同步?

一個進程啓動的多個不相干線程,它們相互之間關係爲異步。 
同步的話指的是多線程同時操作一個數據. 這個時候需要對數據添加保護, 這個保護就是線程的同步。 
     用GCD中的串行隊列來解釋多線程的同步,也就是隊列中的任務
爲串行,它們各自對相鄰的任務有依賴性,如果任務1不完成,那麼任務2就不會開始,這就是同步

6.假設有一個字符串aabcad,請寫一段程序,去掉字符串中不相鄰的重複字符串,即上述字符串處理之後的輸出結果爲:aabcd

char s[7] = "aabcad";

    for (int i = 0; i < 7; i++) {

        for (int j = i+1; j < 7; j++) {

            if ((s[i] == s[j]) && (j != i + 1)) {

                s[j] = s[j + 1];

            }

        }

    }

    for (int i = 0; i < 5; i++) {

        printf("%c", s[i]);

    }

7.獲取一臺設備唯一標識的方法有哪些

UIID      

UUID        

MAC ADDRESS       

OPEN UDID 

廣告標示符   

Vindor標示符 

8.iOS本地數據存儲都有哪幾種方式

NSKeyedArchiver(加密形式)           

NSUserDefaults       

Write寫入方式

SQLite3

9.深拷貝和淺拷貝的理解

對一個實例進行深拷貝時當前類需要實現NSCopying協議。 
淺拷貝是複製出來一個跟原對象是同一地址的對象,而深拷貝則是複製出 來一個跟源對象不同地址的對象,改變原對象,對新對象沒有影響

10.對UIView、UIWindow和CALayer的理解   

UIView是用來顯示內容的,可以處理用戶事件.  

CALayer是用來繪製內容的,對內容進行動畫處理依賴與UIView來進行顯示,不能處理用戶事件。

UIView和CALayer是相互依賴的關係。UIView依賴與calayer提供的內容,CALayer依賴uivew提供的容器來顯示繪製的內容。歸根到底CALayer是這一切的基礎,如果沒有CALayer,UIView自身也不會存在,UIView是一個特殊的CALayer實現,添加了響應事件的能力。總之,UIView來自CALayer,高於CALayer,是CALayer高層實現與封裝。UIView的所有特性來源於CALayer支持. 

11.簡述應用程序按Home鍵進入後臺時的生命週期,以及從後臺回到前臺時的生命週期

<span style="word-wrap: normal; word-break: normal; line-height: 27px;"><span style="word-wrap: normal; word-break: normal; line-height: normal; font-family: simHei;"><span style="font-family: arial, 'courier new', courier, 宋體, monospace; line-height: 27px; white-space: pre-wrap; background-color: rgb(240, 240, 240);">進入後臺時:</span>
</span></span>
<span style="word-wrap: normal; word-break: normal; line-height: 27px;"><span style="word-wrap: normal; word-break: normal; line-height: normal; font-family: simHei;">- (</span>void<span style="word-wrap: normal; word-break: normal; line-height: normal; font-family: simHei;">)applicationWillResignAct<wbr>ive:(</wbr></span>UIApplication<span style="word-wrap: normal; word-break: normal; line-height: normal; font-family: simHei;"> *)application</span></span>
<span style="font-family: arial, 'courier new', courier, 宋體, monospace; word-wrap: normal; word-break: normal; line-height: 27px;"><span style="word-wrap: normal; word-break: normal; line-height: normal; font-family: simHei; white-space: normal;">- (</span><span style="word-wrap: normal; word-break: normal; white-space: normal;">void</span><span style="word-wrap: normal; word-break: normal; line-height: normal; font-family: simHei; white-space: normal;">)applicationDidEnterBackg<wbr>round:(</wbr></span><span style="word-wrap: normal; word-break: normal; white-space: normal;">UIApplication</span><span style="word-wrap: normal; word-break: normal; line-height: normal; font-family: simHei; white-space: normal;"> *)application</span></span>
回到前臺

<span style="word-wrap: normal; word-break: normal; line-height: 27px;"><span style="font-size:12px;"><span style="word-wrap: normal; word-break: normal; line-height: normal; font-family: simHei;">- (</span>void<span style="word-wrap: normal; word-break: normal; line-height: normal; font-family: simHei;">)applicationWillEnterForeground:(</span>UIApplication<span style="word-wrap: normal; word-break: normal; line-height: normal; font-family: simHei;"> *)application</span></span></span>
<span style="word-wrap: normal; word-break: normal; line-height: 27px;"><span style="font-size:12px;"><span style="word-wrap: normal; word-break: normal; line-height: normal; font-family: simHei;">- (</span>void<span style="word-wrap: normal; word-break: normal; line-height: normal; font-family: simHei;">)applicationDidBecomeActive:(</span>UIApplication<span style="word-wrap: normal; word-break: normal; line-height: normal; font-family: simHei;"> *)application</span></span></span>
12.ViewController 的 alloc,loadView,ViewDidLoad,ViewWillAppear,ViewDidUnload,dealloc,init分別是在什麼時候調用的?在自定義ViewController的時候這幾個函數裏面應該做什麼工作

<span style="word-wrap: normal; word-break: normal; line-height: 30px;"><span style="word-wrap: normal; word-break: normal; line-height: 27px;"><span style="font-size:12px;">alloc申請內存時調用      </span></span></span><span style="line-height: 27px; background-color: rgb(240, 240, 240);"><span style="font-size:12px;">loadView加載視圖時調用        </span></span><span style="line-height: 27px; background-color: rgb(240, 240, 240);"><span style="font-size:12px;">ViewDidLoad視圖已經加載後調用       </span></span><span style="font-size:12px; line-height: 27px; background-color: rgb(240, 240, 240);">ViewWillAppear視圖將要出現時調用    </span><span style="line-height: 27px; background-color: rgb(240, 240, 240);"> </span><span style="font-size:12px; line-height: 27px; background-color: rgb(240, 240, 240);">ViewDidUnload視圖已經加載</span><span style="line-height: 27px; background-color: rgb(240, 240, 240);"><span style="font-size:12px;">但沒有加載出來調用     </span></span><span style="font-size:12px; line-height: 27px; background-color: rgb(240, 240, 240);">dealloc銷燬該視圖時調用    </span><span style="font-size:12px; line-height: 27px; background-color: rgb(240, 240, 240);">init視圖初始化時候調用</span>
<span style="line-height: 24px; text-indent: 28px;"><span style="font-size:18px;">13.面向對象的三大特徵,並作簡單的介紹。</span></span>
<span style="line-height: 24px; text-indent: 28px;"><span style="font-size:12px;">答:封裝、繼承、多態</span></span>
<span style="line-height: 24px; text-indent: 28px;"><span style="font-size:12px;">封裝:將一個實例的所有屬性封裝到某個類中</span></span>
<span style="line-height: 24px; text-indent: 28px;"><span style="font-size:12px;">繼承:子類繼承父類所有方法和屬性</span></span>
<span style="line-height: 24px; text-indent: 28px;"><span style="font-size:12px;">多態:父類指針指向子類對象</span></span>


發佈了12 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章