1. object-c的類可以多重繼承麼?可以實作多個接口麼?category是什麼?重寫一個類的方式用繼承好還是分類好?為什麼?
object-c的類不可以多重繼承;可以實作多個接口,通過實作多個接口可以完成c++的多重繼承;category是類别,一般情況用分類好,用category去重寫類的方法,僅對本category有效,不會影響到其他類與原有類的關系。
2.#import 跟#include 又什麼差別,@class呢, #import<> 跟 #import”"又什麼差別?
#import 是objective-c導入頭檔案的關鍵字,#include是c/c++導入頭檔案的關鍵字,使用#import頭檔案會自動隻導入一次,不會重複導 入,相當于#include和#pragma once;@class告訴編譯器某個類的聲明,當執行時,才去檢視類的實作檔案,可以解決頭檔案的互相包含;#import<>用來包含系 統的頭檔案,#import””用來包含使用者頭檔案。
3. 屬性readwrite,readonly,assign,retain,copy,nonatomic 各是什麼作用,在那種情況下用?
readwrite 是可讀可寫特性;需要生成getter方法和setter方法時
readonly 是隻讀特性 隻會生成getter方法 不會生成setter方法 ;不希望屬性在類外改變
assign 是指派特性,setter方法将傳入參數指派給執行個體變量;僅設定變量時;
retain 表示持有特性,setter方法将傳入參數先保留,再指派,傳入參數的retaincount會+1;
copy 表示指派特性,setter方法将傳入對象複制一份;需要完全一份新的變量時。
nonatomic 非原子操作,決定編譯器生成的setter getter是否是原子操作,atomic表示多線程安全,一般使用nonatomic
4.寫一個setter方法用于完成@property (nonatomic,retain)nsstring *name,寫一個setter方法用于完成@property(nonatomic,copy)nsstring *name
- (void) setname:(nsstring*) str
{
[str retain];
[name release];
name = str;
}
- (void)setname:(nsstring *)str
id t = [str copy];
name = t;
5.對于語句nsstring*obj = [[nsdata alloc] init]; obj在編譯時和運作時分别時什麼類型的對象?
編譯時是nsstring的類型;運作時是nsdata類型的對象
6.常見的object-c的資料類型有那些, 和c的基本資料類型有什麼差別?如:nsinteger和int
object-c的資料類型有nsstring,nsnumber,nsarray,nsmutablearray,nsdata等等,這些都是class,建立後便是對象,而c語言的基本資料類型int,隻是一定位元組的記憶體空間,用于存放數值;nsinteger是基本資料類型,并不是nsnumber的子類,當然也不是nsobject的子類。nsinteger是基本資料類型int或者long的别名(nsinteger的定義typedef long nsinteger),它的差別在于,nsinteger會根據系統是32位還是64位來決定是本身是int還是long。
7.id 聲明的對象有什麼特性?
id 聲明的對象具有運作時的特性,即可以指向任意類型的objcetive-c的對象;
8.objective-c如何對記憶體管理的,說說你的看法和解決方法?
objective-c的記憶體管理主要有三種方式arc(自動記憶體計數)、手動記憶體計數、記憶體池。
9.記憶體管理的幾條原則時什麼?按照預設法則.那些關鍵字生成的對象
需要手動釋放?在和property結合的時候怎樣有效的避免記憶體洩露?
誰申請,誰釋放
遵循cocoa touch的使用原則;
記憶體管理主要要避免“過早釋放”和“記憶體洩漏”,對于“過早釋放”需要注意@property設定特性時,一定要用對特性關鍵字,對于“記憶體洩漏”,一定要申請了要負責釋放,要細心。
關鍵字alloc 或new 生成的對象需要手動釋放;
設定正确的property屬性,對于retain需要在合适的地方釋放,
10.如何對ios裝置進行性能測試?
profile-> instruments ->time profiler
11.看下面的程式,第一個nslog會輸出什麼?這時str的retaincount是多少?第二個和第三個呢? 為什麼?
=======================================================
nsmutablearray* ary = [[nsmutablearray array] retain];
nsstring *str = [nsstring stringwithformat:@"test"];
[strretain];
[aryaddobject:str];
nslog(@"%@%d",str,[str retaincount]);
[strrelease];
[aryremoveallobjects];
最新内容請見作者的github頁:http://qaseven.github.io/