iOS 面試題
- 淺複製和深複製的區別?
- 類別的作用?繼承和類別在實現中有何區別?
- 類別和類擴展的區別?
- obc中的協議和java中的接口概念有何不同?
- 談談你對KVC與KVO的區別。
- 代理的作用。
- obc中可修改和不可以修改類型。
- 我們說的obc是動態運行時語言是什麼意思?
- 通知和協議的不同之處?
- 什麼是推送消息?
- 關於多態性。
- 對於單例的理解。
- 事件分發和響應者連。
- frame和bounds有什麼不同?
- 方法和選擇器有何不同?
- OBC的垃圾回收機制?
- NSOperation queue?
- 懶加載
- 是否在一個視圖控制器中嵌入兩個tableview控制器?
- 一個tableView是否可以關聯兩個不同的數據源?你會怎麼處理?
- Object-c的類可以多重繼承麼?可以實現多個接口麼?重寫一個類的方式用繼承好還是分類好?爲什麼?
#import
跟#include
什麼區別#import<>
跟#import""
又什麼區別?- 類變量的@protected ,@private,@public,@package聲明各有什麼含義?
- id 聲明的對象有什麼特性?
- MVC是什麼?有什麼特性?爲什麼在iPhone上被廣泛運用?
- 對於語句NSString* testObject = [[NSData alloc] init];testObject在編譯時和運行時分別是什麼類型的對象?
- 什麼是安全釋放?
28.
29.
30. - property中屬性retain,copy,assgin的含義分別是什麼?有什麼區別?將其轉換成get/set方法怎麼做?有什麼注意事項?
- 委託是什麼?委託的property聲明用什麼屬性?爲什麼?ARC下用weak?
-
- Cocoa中有虛基類的概念麼?怎麼簡潔的實現?
自動釋放池跟GC(垃圾回收)有什麼區別?
for(int index = 0; index < 20; index ++){ NSString *tempStr = @”tempStr”; NSLog(tempStr); NSNumber *tempNumber = [NSNumber numberWithInt:2]; NSLog(tempNumber); }
上面這段代碼有什麼問題.?會不會造成內存泄露(多線程)?在內存緊張的設備上做大循環時自動釋放池是寫在循環內好還是循環外好?爲什麼?
- 內存管理的幾條原則時什麼?按照默認法則.那些關鍵字生成的對象需要手動釋放?在和property結合的時候怎樣有效的避免內存泄露?
- 在一個對象釋放前.如果他被加到了notificationCenter 中.不在notificationcenter中remove這個對象可能會出現什麼問題?
- 怎樣實現一個 singleton的類.給出思路。
- 什麼是序列化或者Acrchiving,可以用來做什麼,怎樣與copy結合,原理是什麼?
- 線程與進程的區別和聯繫?
- 在iphone上有兩件事情要做,請問是在一個線程裏按順序做效率高還是兩個線程裏做效率高?爲什麼?
- runloop是什麼?在主線程中的某個函數裏調用了異步函數,怎麼樣block當前線程,且還能響應當前線程的timer事件,touch事件等.
- ios平臺怎麼做數據的持久化?coredata和sqlite有無必然聯繫?coredata是一個關係型數據庫嗎?
- 闡述一個nil對象從interface bulider產生,到載入程序運行空間,最後被釋放時所經歷的生命週期.
46. - kvc是什麼?kvo是什麼?有什麼特性?
- 響應者鏈是什麼?
-
- timer的間隔週期準嗎?爲什麼?怎樣實現一個精準的timer?
- UIscrollVew用到了什麼設計模式?還能再foundation庫中找到類似的嗎?
如果要開發一個類似eclipse的軟件,支持插件結構。且開放給第三方開發。你會怎樣去設計它?(大概思路)
53.main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); printf("%d,%d",*(a+1),*(ptr-1)); }
以下爲Windows NT下的32位C++程序,請計算sizeof的值 voidFunc ( char str[100] ) { sizeof( str ) =? } void *p = malloc( 100 ); sizeof ( p ) = ?
- (void)*getNSString(const NSString *inputString)
{ inputString =@”This is a main test\n”;
return ;}
-main(void)
{NSString *a=@”Main”;
NSString *aString = [NSStringstringWithString:@”%@”,getNSString(a)];
NSLog(@”%@\n”, aString);}
最後問輸出的字符串:NULL,output在 函數返回後,內存已經被釋放。
- (void)*getNSString(const NSString *inputString)
列舉幾種進程的同步機制,並比較其優缺點。
- 堆和棧的區別
- 什麼是鍵-值,鍵路徑是什麼?
- c和obj-c如何混用
- 目標-動作機制
- cocoatouch框架
- objc的內存管理
- 自動釋放池是什麼,如何工作?
- 類工廠方法是什麼?
- 單件實例是什麼?
- 動態綁定—在運行時確定要調用的方法
- obj-c的優缺點
- readwrite,readonly,assign,retain,copy,nonatomic 屬性的作用?
- ViewController的 didReceiveMemoryWarning 是在什麼時候被調用的?
- 談談你對ARC 的認識和理解?
- ObjC中,與alloc語義相反的方法是dealloc還是release?與retain語義相反的方法是dealloc還是release,爲什麼?需要與alloc配對使用的方法是dealloc還是release,爲什麼
- 在一個對象的方法裏面:
self.name = “object”;
和
name =”object”
有什麼不同? 這段代碼有什麼問題:
@implementation Person - (void)setAge:(int)newAge { self.age = newAge; } @end
- 什麼是retaincount?
以下每行代碼執行後,person對象的retain count分別是多少?
Person *person = [[Person alloc] init];
[person retain];
[person release];
[person release];爲什麼很多內置類如UITableViewController的delegate屬性都是assign而不是retain的?
- 定義屬性時,什麼情況使用copy,assign,和retain?
- autorelease的對象是在什麼時候被release的?
這段代碼有什麼問題,如何修改?
for (int i = 0; i < someLargeNumber; i++)
{
NSString *string = @”Abc”;
string = [string lowercaseString];
string = [stringstringByAppendingString:@”xyz”];
NSLog(@“%@”, string);
}autorelease和垃圾回收機制(gc)有什麼關係?IPhone OS有沒有垃圾回收(gc)?
- Objective C中的protocal是什麼?
- Objective C中的selector 是什麼?
- Objective C中的category是什麼?
- 什麼是Notification?什麼時候用delegate,什麼時候用Notification?
- 什麼是KVC和KVO?Notification和KVO有什麼不同?KVO在ObjC中是怎麼實現的?
- ViewController 的 loadView,viewDidLoad, viewDidUnload 分別是在什麼時候調用的?在自定義ViewController的時候這幾個函數裏面應該做什麼工作?
- ViewController 的didReceiveMemoryWarning 是在什麼時候被調用的?UIViewController類中didReceiveMemoryWarning默認的操作是什麼?
- UITableViewController 中,創建UITableViewCell時,initWithSytle:resuseIdentifier中,reuseIdentifier有什麼用?簡述UITableViewCell的複用原理.
- UIView 和CALayer 有什麼區別?
- 以 UIView 類animateWithDuration:animations: 爲例,簡述UIView動畫原理。
iOS 面試題(二)
iOS數據持久化存儲方法?
- 偏好設置
- 歸檔解檔
- 數據庫(SQlite3,FMDB,core data)
- web存儲
- 歸檔解檔(NSCoding協議,KVC)
- MVVM