關於String:
1,把一個整數,轉換成一個NSString
[NSString stringWithFormat:@"%d",3];
2,比較兩個NSString是否相等
[@"test" isEqualToString:@"test"];
3,@"abcdefg",截取第兩個字元開始的三個字元
[@"abcdefg" substringWithRange:NSMakeRange(1, 3)]
4,講解UTF8與Unicode的區別與關係
5,NSString , NSMutableString的區別
|
NSString, 不可修改字串 NSMutableString,可修改字串 |
6,計算一個字串在指定寬度,指定字型情況下,需要渲染的實際像素高度
[@"abcdefg" sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:CGSizeMake(100, INT32_MAX)].height
7,用HTTP協議,擷取www.baidu.com網站的HTML資料
[NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.baidu.com"]]
UIView與UIViewController:
1,說明UIView中 frame與bounds的區別
|
frame: UIView執行個體的位置與大小資訊 bounds: UIView執行個體的顯示內部內容的位置與大小資訊 |
2,簡單講解UITableView的UITableViewDataSource與UITableViewDelegate的作用
|
這兩個都是UITableView所需要的協議: UITableViewDataSource,使用者定義此tableView的資料擷取方法,用來提供資料來源 UITableViewDelegate,用來定義顯示樣式與使用者事件相關方法 |
3,實現一個帶背景UIView的透明漸層動畫效果,與移動動畫效果
//動畫配製開始[UIView beginAnimations:@"animation" context:nil];[UIView setAnimationDuration:.5];//圖片上升動畫CGRect f = imgView.frame ;f.origin.y = 30;imgView.frame = f;//半透明度漸層動畫imgView.alpha = 0;//提交動畫[UIView commitAnimations];
4,使一個UIImageView的圖片視圖對象,隨著改變它的frame而自適應做展開。
UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"test.png"]];imgView.frame = CGRectMake(0, 0, 200, 200);imgView.contentMode = UIViewContentModeScaleToFill;
5,使一個UIView對象,在螢幕旋屏後,保持居上位置不變,居左位置自適應,大小不變
UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"test.png"]];imgView.frame = CGRectMake(20,20, 100, 100);imgView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin;
6,UIView中所使用的設計模式,越多越好~
7,用UIView的layer中的某個屬性,實現一個圓角視圖(需要引入Quartz2D庫)
self.view.layer.cornerRadius = 5;self.view.clipsToBounds = YES;
8,UIScrollView中contentSize的作用
9,UIViewController與View的關係,在MVC模式中的角色
|
一個是Controller層,一個是View層,Controller控制View的顯示。 |
10,列舉幾種系統ViewController
|
UITabBarController UINavigationController UITableViewController UIImagePickerController |
11,UIView中方法drawRect與layoutSubviews的區別,
|
當調用view的setNeedsDisplay時,系統非同步呼叫drawRect方法,並配製圖形的上下文供在此方法內使用Quartz2D API。 當調用view的setNeedsLayout時,系統非同步呼叫layoutSubviews方法,但不配製圖形上下文,只做頁面配置使用 |
12,UIView中的clipsToBounds屬性的作用
|
子視圖的大小超過父視圖時,如果此屬值為YES,則把多餘的部分隱藏,反之依然。 |
13,如果UIView中的一個子View的位置在此UIView之外,是否還可以擷取此UIView的touchesBegan等方法
14,如何判斷使用者雙擊操作
|
在touchesBegan方法中,擷取UITouch執行個體: [ [ touches anyObject ] tapCount]; |
15,在UIView的drawRect方法內,用Quartz2D API繪製一個像素寬的水平直線
-(void)drawRect:(CGRect)rect{//擷取圖形上下文 CGContextRef context = UIGraphicsGetCurrentContext();//設定圖形內容相關的路徑繪製顏色CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor);//取消防鋸齒CGContextSetAllowsAntialiasing(context, NO);//添加線CGContextMoveToPoint(context, 50, 50);CGContextAddLineToPoint(context, 100, 50);//繪製CGContextDrawPath(context, kCGPathStroke);}
16,用UIWebView載入: www.baidu.com
UIWebView *web = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];[web loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]]];[self.view addSubview:web];[web release];
17,子線程是否也可以修改UIView
記憶體相關:
1,retain是作什麼用的,在記憶體管理中起到什麼作用,與之對應的釋放方法是什麼
|
使執行個體的引用計數(retainCount)加一,與之對應的釋放方法有:release, autorelese。 |
2,NSObject *o = [ [ NSObject new ] autorelease ]; 此句執行完後,此對象"o"的retainCount是多少
3,講解NSAutoreleasePool在Objective-C中記憶體管理的作用
|
記憶體管理池, 使Objective-C上升為半自動化的記憶體管理語言. |
4,簡單講解@property中的聲明,assign 與 retain的區別,並實現一個retain聲明屬性的setter方法
|
這兩個都為對setter方法的聲明,只能其一。 assign, 標明setter方法僅以指標賦值的方式實現 retain,setter方法,必須實現retain操作。 |
-(void)setName:(NSString*)_name{ if(name != _name){ [name release]; name = [_name retain]; }}
5,NSArray *arr = [ NSArray array ]; 此arr對象需不需要release,為什麼
|
不需要,因為沒有retain, alloc, new, copy等方法。 此為cocoa約定俗成的建立對象的便捷方法,此執行個體的一個retainCount已經被放入autoreleasePool中。 |
runtime與cocoa架構:
1,id,在Objective-C中表示什麼,起什麼作用
|
可以指向任何執行個體的類型,它為一個僅含有一個Class類型的isa成員指標的結構體。 |
typedef struct objc_class *Class;typedef struct objc_object { Class isa;} *id;struct objc_class { Class isa;#if !__OBJC2__ Class super_class OBJC2_UNAVAILABLE; const char *name OBJC2_UNAVAILABLE; long version OBJC2_UNAVAILABLE; long info OBJC2_UNAVAILABLE; long instance_size OBJC2_UNAVAILABLE; struct objc_ivar_list *ivars OBJC2_UNAVAILABLE; struct objc_method_list **methodLists OBJC2_UNAVAILABLE; struct objc_cache *cache OBJC2_UNAVAILABLE; struct objc_protocol_list *protocols OBJC2_UNAVAILABLE;#endif} OBJC2_UNAVAILABLE;
2,NSArray, NSMutableArray, NSDictionary, NSMutableDictionary, NSSet, 的作用
|
這些是cocoa架構中常用容器,用來存放不同目的的執行個體。 NSArray,為儲存一系列有序執行個體,一旦建立不可添加修改列表。 NSMutableArray,用於建立可變對象列表的有序執行個體。 NSDictionary,存放索引值對的資料,形如Hash。 NSSet,存放無序資料。 |
3,NSNumber, NSValue的用法
|
NSNumber,用於存放數值資訊相關類,此執行個體可直接存放在cocoa容器中。 NSValue,用於儲存資料結構體。 |
4,NSObject 的結構定義中的isa是什麼
struct objc_class { Class isa;#if !__OBJC2__ Class super_class OBJC2_UNAVAILABLE; const char *name OBJC2_UNAVAILABLE; long version OBJC2_UNAVAILABLE; long info OBJC2_UNAVAILABLE; long instance_size OBJC2_UNAVAILABLE; struct objc_ivar_list *ivars OBJC2_UNAVAILABLE; struct objc_method_list **methodLists OBJC2_UNAVAILABLE; struct objc_cache *cache OBJC2_UNAVAILABLE; struct objc_protocol_list *protocols OBJC2_UNAVAILABLE;#endif} OBJC2_UNAVAILABLE;
5,Objective-C語言的動態性的特性與實現(Runtime)
|
http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Introduction/Introduction.html |
6,怎樣判斷一個對象是否是一個類的執行個體
[ testView isKindOfClass:[ UIView class ] ];
7,怎麼判斷一個對象是否含有指定方法
[testView respondsToSelector:@selector(methodName)];
8,用NSTimer做一個定時器,每隔一秒列印: hello world
-(void)printHello{NSLog(@"hello world!!");}-(IBAction)clickBtn:(id)sender{NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1 target:selfselector:@selector(printHello)userInfo:nil repeats:YES];[timer fire];}
9,用NSObject 的 performSelectorInBackground 建立子線程,並在子線程完成一次HTTP請求,把請求結果顯示在螢幕上
10,NSNotificenter的作用,說明怎樣實現Observer模式
|
訊息分發與註冊中心。用來管理在在訊息中心中註冊監聽的對象,並在發生事件時,把訊息分發送給監聽此事件的監聽者。 此為典型的Observer模式的實現。在我們的應用中,為瞭解偶模組之間的偶合度,會大量使用訊息中心,以事件與訊息去驅動模組與模組之間的協作。 |
11,簡要說明NSRunloop
|
http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html#//apple_ref/doc/uid/10000057i-CH16-SW1 |