目錄
關於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數據
|
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的作用
用來標識當前內容顯示的位置,類型是CGSize |
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 )]; [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成員指針的結構體。 |
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是什麼
是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)
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];
} |
9,用NSObject 的 performSelectorInBackground 創建子線程,並在子線程完成一次HTTP請求,把請求結果顯示在屏幕上
10,NSNotificenter的作用,說明怎樣實現Observer模式
消息分發與註冊中心。用來管理在在消息中心中註冊監聽的對象,並在發生事件時,把消息分發送給監聽此事件的監聽者。 此爲典型的Observer模式的實現。在我們的應用中,爲了解偶模塊之間的偶合度,會大量使用消息中心,以事件與消息去驅動模塊與模塊之間的協作。 |
11,簡要說明NSRunloop
IO與網絡相關:
1,Document, tmp, xx.app目錄的區別
2,判斷Document目錄下是否存在test.json文件,如果不存在則創建一個新文件,
內容爲:{ "name": "jory" }
3,使用ASIHTTPRequest進行一次異步的網絡請求,並打印返回結果
4,NSData, NSMutableData的區別,舉例它與NSString, UIImage相關用法