经典面试总结2
1.
寫一個NSString類的實現+?(id)initWithCString:(constchar?*)nullTerminatedCString?encoding:(NSStringEncoding)encoding;
{?NSString?*obj;
obj?=?[self?allocWithZone:?NSDefaultMallocZone()];
obj?=?[obj?initWithCString:?nullTerminatedCString?encoding:?encoding];?return?[obj?autorelease]; } 2.談談你對MVC的理解?為什么要用MVC?在Cocoa中MVC是怎么實現的?你還熟悉其他的OC設計模式或別 的設計模式嗎?
MVC就是Model-View-Controller的縮寫,M指的是業務模型,V指的是用戶頁面,C指的是控制器。MVC是架構模式,是講M和 V的代碼分離,從而使同那個一個程序可以使用不同的表現形式。 M:表示數據和業務規則,V是用戶看到的并與之交互的頁面,C是接受用戶的輸入并調用M和V取完成用戶需求的 單例,代理,觀察者,工廠模式等 單例模式:說白了就是一個類不通過alloc方式創建對象,而是用一個靜態方法返回這個類的對象。系統只需要擁有一個的 全局對象,這樣有利于我們協調系統整體的行為; 代理模式:代理模式給某一個對象提供一個代理對象,并由代理對象控制對源對象的引用.比如一個工廠生產了產品,并不想 直接賣給用戶,而是搞了很多代理商,用戶可以直接找代理商買東西,代理商從工廠進貨.常見的如QQ的自動回復就屬于代 理攔截,代理模式在iphone中得到廣泛應用.
觀察者模式: 當一個物體發生變化時,會通知所有觀察這個物體的觀察者讓其做出反應。實現起來無非就是把所有觀察者的 對象給這個物體,當這個物體的發生改變,就會調用遍歷所有觀察者的對象調用觀察者的方法從而達到通知觀察者的目的;
3.
readwrite,readonly,assign,retain,copy,nonatomic 、strong、weak屬性的作用?并區別
strong(強引用)、 weak(弱引用)?什么情況使用copy,assign,和retain?
readwrite 是可讀可寫特性;需要生成getter方法和setter方法時
readonly 是只讀特性 只會生成getter方法 不會生成setter方法 ;不希望屬性在類外改變
assign 是賦值特性,setter方法將傳入參數賦值給實例變量;僅設置變量時;
retain 表示持有特性,setter方法將傳入參數先保留,再賦值,傳入參數的retaincount會+1;
copy 表示賦值特性,setter方法將傳入對象復制一份;需要完全一份新的變量時。
nonatomic 非原子操作,決定編譯器生成的setter getter是否是原子操作,atomic表示多線程安全,一般使用 nonatomic
assign用于簡單數據類型,如NSInteger,double,bool。
retain 和copy用戶對象,copy用于當 a指向一個對象,b也想指向同樣的對象的時候,如果用assign,a如果釋放,再 調用b會crash,如果用copy 的方式,a和b各自有自己的內存,就可以解決這個問題。retain 會使計數器加1,也可以解 決assign的問題。另外:atomic和nonatomic用來決定編譯器生成的getter和setter是否為原子操作。 在多線程環境 下,原子操作是必要的,否則有可能引起錯誤的結果。
4.?一:
static?DataHandle?*handle?=?nil;+?(DataHandle?*)shareInstance{
if(handle?==?nil){
//如果還沒有創建過對象,使用handle指向新創建的對象
handle?=?[[DataHandle?alloc]?init];
?}
//如果已經創建過對象,則直接返回已經創建的對象。
return?handle;
}?
二:
+?(id)sharedInstance??
{??
????static?id?sharedInstance?=?nil;??
????static?BOOL?token?=?NO;??
??????
????if?(!token)?{??
????????token?=?YES;??
??????????
????????sharedInstance?=?[[NSObject?alloc]?init];??
????}??
??????
????return?sharedInstance;??
}??
//單例方法。dispatch_once??第三種方法。
#pragma?mark?--?封裝的Manager單例方法
+(instancetype)shareManager
{
????static?MusicInfoManager?*manager?=?nil;
????static?dispatch_once_t?onceToken;
????dispatch_once(&onceToken,?^{
????????//初始化
????????manager?=?[[MusicInfoManager?alloc]?init];
?});
????return?manager;
? ? }
5
寫一個完整的代理,包括聲明,實現
//創建
@protocol BeforeMarriedDelagate <NSObject> @required
-(void)doCook:(NSString *)foodName; -(void)doHomework;
@optional
-(void)driveCar;
-(void)makeMoney; @end
//聲明
@interface Boy : NSObject< BeforeMarriedDelagate>
-(void)doCook:(NSString *)foodName; -(void)doHomework; -(void)makeMoney;
//實現
@implementation Boy
-(void)doCook:(NSString *)foodName
{ NSLog(@"做飯:%@!",foodName);}
-(void)doHomework
{ NSLog(@"今天洗衣服!");}
-(void)makeMoney
{ NSLog(@"Coding!!");}
@end
6
類別的作用?繼承和類別在實現中有何區別?
答案:category 可以在不獲悉,不改變原來代碼的情況下往里面添加新的方法,只能添加,不能刪除修改。
并且如果類別和原來類中的方法產生名稱沖突,則類別將覆蓋原來的方法,因為類別具有更高的優先級。
類別主要有3個作用:
(1)將類的實現分散到多個不同文件或多個不同框架中。
(2)創建對私有方法的前向引用。
(3)向對象添加非正式協議。
繼承可以增加,修改或者刪除方法,并且可以增加屬性。
.Difference between categories and extensions?
類別和類擴展的區別。
答案:category和extensions的不同在于 后者可以添加屬性。另外后者添加的方法是必須要實現的。
extensions可以認為是一個私有的Category。
?
轉載于:https://www.cnblogs.com/liuyang666/p/5236003.html
總結
- 上一篇: 项目经理之项目经理的基本特征
- 下一篇: C语言常见单链表面试题(2)