1,計算一個字串在指定寬度,指定字體情況下,需要渲染的實際像素高度
[@"abcdefg" sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:CGSizeMake(100, INT32_MAX)].height 2,用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; 7,用UIView的layer中的某個屬性,實現一個圓角視圖(需要引入Quartz2D庫) self.view.layer.cornerRadius = 5; self.view.clipsToBounds = YES; 8,UIScrollView中contentSize的作用 用來標識當前內容顯示的位置,類型是CGSize 9,UIViewController與View的關系,在MVC模式中的角色 一個是Controller層,一個是View層,Controller控制View的顯示。 11,UIView中方法drawRect與layoutSubviews的區別, 當調用view的setNeedsDisplay時,系統異步調用drawRect方法,並配制圖形的上下文供在此方法內使用Quartz2D API。 當調用view的setNeedsLayout時, 系統異步調用layoutSubviews方法,但不配制圖形上下文,只做頁面布局使用 12,UIView中的clipsToBounds屬性的作用 子視圖的大小超過父視圖時,如果此屬值為YES,則把多余的部分隱藏,反之依然。 13,如果UIView中的一個子View的位置在此UIView之外,是否還可以獲取此UIView的touchesBegan等方法 獲取不到 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 不能,只有主線程有直接修改UI的能力。 內存相關: 1,retain是作什麼用的,在內存管理中起到什麼作用,與之對應的釋放方法是什麼 使實例的引用計數(retainCount)加一,與之對應的釋放方法有:release, autorelese。 2,NSObject *o = [ [ NSObject new ] autorelease ]; 此句執行完後,此對象"o"的retainCount是多少 為1 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成員指針的結構體。 2,NSArray, NSMutableArray, NSDictionary, NSMutableDictionary, NSSet, 的作用 這些是cocoa架構中常用容器,用來存放不同目的的實例。 NSArray,為存儲一系列有序實例,一旦創建不可添加修改列表。 NSMutableArray,用於創建可變對象列表的有序實例。 NSDictionary,存放鍵值對的數據,形如Hash。 NSSet,存放無序數據。 3,NSNumber, NSValue的用法 NSNumber,用於存放數值信息相關類,此實例可直接存放在cocoa容器中。 NSValue,用於存儲數據結構體。 4,NSObject 的結構定義中的isa是什麼 是Class類型的一個數據結構體, 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:self selector:@selector(printHello) userInfo:nil repeats:YES]; [timer fire]; } 10,NSNotificenter的作用,說明怎樣實現Observer模式 消息分發與注冊中心。用來管理在在消息中心中注冊監聽的對象,並在發生事件時,把消息分發送給監聽此事件的監聽者。 此為典型的Observer模式的實現。在我們的應用中,為了解偶模塊之間的偶合度,會大量使用消息中心,以事件與消息去驅動模塊與模塊之間的協作。 11,簡要說明NSRunloop