iOS開發知識要點

 
目錄
關於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的作用

用來標識當前內容顯示的位置,類型是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)];
[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成員指針的結構體。
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相關用法

發佈了146 篇原創文章 · 獲贊 55 · 訪問量 136萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章