標籤:io os 使用 ar 檔案 資料 sp on cti
1 Objective-C提供了幾種記憶體管理方式?請詳細舉例談談你對objective-C的記憶體管理原則的理解。
答:兩種,ARC和手動管理(retain 、release 或autorelease)。1.new,alloc和copy方法建立一個對象時,該對象的保留計數器值為1.不再使用該對象時,要負責向該對象發送一條release或autorelease訊息.這樣,該對象將在使用壽命結束時被銷毀. 2.通過任何其他方法獲得一個對象時,則假設該對象的保留計數器值為1,而且已經被設定為自動釋放,不需要執行任何操作來確保該對象被清理. 3.如果你保留了某個對象,需要(最終)釋放或自動釋放該對象.必須保持retain方法和release方法的使用次數相等。
2 在iOS發生事件時什麼時候用delegate,什麼時候用NSNotificationCenter?,兩者有什麼不同,請你寫一個delegate的interface。
答:(1)用的時候這樣選擇:Delegate: 寄件者告知事件會發生,delega同意後寄件者響應事件,是一對一的關係。
(2)Notification: 訊息的寄件者告知接收者事件已經發生或者將要發生,接收者不能影響寄件者行為,是一對多關聯性。
delegate效率更高。
(3)delegate例子:
@protocol : MyDelegate
@interface MyClass
{
id delegate;
}
@protocol MyClass
- (void)doSomething;
@end
3 @property中有哪些主要屬性參數,請談談分別在什麼下情況下使用?
答:readwrite:產生setter\getter方法。
Readonly:只產生簡單的getter,沒有setter。
Assign:預設類型,setter方法直接賦值,而不進行retain操作。
Retain:setter方法對參數進行release舊值,再retain新值。
Copy:setter方法進行Copy操作,與retain一樣。
Nonatomic:禁止多線程,變數保護,提高效能。
4 預先處理命令中的宏一般有哪兩種常用的用法,請寫一個‘標準‘宏MIN ,這個宏輸入兩個參數並返回較小的一個。
答:(1)不帶參數:#define 宏名 字串。
帶參數:#define 宏名(參數表)字串。
#define MIN(a,b) ((a)<(b)?(a):(b))。
5 ios的沙箱機制是什嗎?沙箱中一般有哪幾種目錄結構,請談談每個目錄結構應用於儲存什麼樣的資料?如何避免你的應用資料存放區違反iOS的資料存放區指南?
答:預設情況下,每個沙箱含有3個檔案夾:Documents, Library 和 tmp。因為應用的沙箱機制,應用只能在幾個目錄下讀寫檔案。
Documents:蘋果建議將程式中建立的或在程式中瀏覽到的檔案資料儲存在該目錄下,iTunes備份和恢複的時候會包括此目錄。
Library:儲存程式的預設設定或其它狀態資訊。
Library/Caches:存放快取檔案,iTunes不會備份此目錄,此目錄下檔案不會在應用退出刪除。
tmp:提供一個即時建立臨時檔案的地方。
6 談談你對iPhone專用程式和ipad專用程式的表徵圖尺寸,命名規範以及裝置尺寸的瞭解。
答:(1)iPhone:icon.png 57x57 。
[email protected] 114x114。
iPad:icon-72.png 72x72。
(2)iPhone4和4S為3.5英寸 iPhone5為4英寸。
iPad為9.7英寸。
7 談談你對Core Data的理解.
答:有了Core Data,就不必像用sqlite那樣編寫繁瑣代碼,減少工作量,也可以迴避使用c的文法,降低ios開發的技術門檻。
8 ios中的block有什麼用,定義一個名為maxBlock的block變數,輸入兩個整型參數返回較大的那個。
答:(1)Objective-C特性,一個函數裡定義了個block,這個block就可以訪問該函數的內部變數。
int (^maxBlock)(int a, int b) = ^(int a, int b){if(a > b)return a; else return b;};
9 frame,bounds ,center的區別。Iphone中擷取螢幕尺寸的方法。
(1)frame:指的是視圖在父視圖的座標系統中的大小和位置。
bound:指的是視圖在試圖本身的座標系統中的大小(位置起點是原點)。
center:指的是視圖在父視圖座標系統中的中心點。
(2)CGRect rx = [ UIScreen mainScreen ].bounds;
10 什麼是GCD,舉例說明在什麼情況下使用。函數dispatch_sync ,dispatch_async , dispatch_once,dispatch_apply,分別有什麼功能?
答:(1)GCD其實就是個多線程,它可以提高代碼的執行效率與多核的利用率(2)dispatch_sync:主線程上運行。
dispatch_async:非同步運行。
dispatch_once:代碼僅會被運行一次,且保證安全執行緒,可用來建立單例。
dispatch_apply:運行傳遞來的塊。
11 說明viewController的生命週期。
答:init->loadView->viewDidLoad->viewWillAppear->viewDidAppear->viewWillDisappear->viewDidDisappear->viewDidUnload->dealloc。
12 談談viewController的頁面跳轉方式
答:從一個Controller跳轉到另一個Controller時,一般有以下2種:
1、利用UINavigationController,調用pushViewController,進行跳轉;這種採用壓棧和出棧的方式,進行Controller的管理。調用popViewControllerAnimated方法可以返回。
PickImageViewController *pickImageViewController = [[PickImageViewController alloc] init];
[self.navigationController pushViewController: pickImageViewController animated:true];
[pickImageViewController release];
2、利用UIViewController自身的presentModalViewController,進行跳轉;調用dismissModalViewControllerAnimated方法可以返回。
PickImageViewController *pickImageViewController = [[PickImageViewController alloc] init];
[self presentModalViewController:pickImageViewController animated:YES];
//返回
[self dismissModalViewControllerAnimated:YES];
ios面試題2