iOS开发知识点总结
總結(jié)整理
〇、常用控件
| UIButton | 按鈕 | 按鈕的作用是:支持用戶的點擊事件,在用戶點擊后做出響應(yīng) |
| UILabel | 文本標(biāo)簽 | 文本標(biāo)簽的作用是顯示一串固定的文字 |
| UITextField | 文本輸入框 | 例如輸入用戶名或者是密碼的部分,鍵入內(nèi)容的區(qū)域 |
| UIImageView | 圖片的顯示 | 用于顯示圖片,添加圖片的 |
| UIScrollview | 滾動的控件 | 如果內(nèi)容比較多,超出了一個屏幕,就可以用它來顯示 |
| UITableView | 表格 | 如果每一行顯示的內(nèi)容格式差不多,就用這個表格控件 |
| UICollectionView | 九宮格 | 如果顯示的東西是一塊一塊的,一格一格的,而且每個格子張的差不多,就用這個控件 |
| UIWebView | 網(wǎng)頁顯示控件 | 一般用來顯示網(wǎng)頁,使用它,就可以在手機上瀏覽網(wǎng)頁 |
| UIAlertView | 對話框(中間彈框) | 從中間彈出一個框提示用戶下一步該做 |
| UINavigation | 導(dǎo)航條 | 顯示在頂部的條 |
| UIPageControl | 分頁控件 | 能顯示當(dāng)前的頁碼 |
| UITextView | 能滾動的文字顯示控件 | 如果文字內(nèi)容比較多,需要黃航顯示,并且需要編輯 |
| UISwitch | 開關(guān) | yes or no,開與關(guān) |
| UIActionSheet | 底部彈框 | 從底部彈出一個框提示用戶下一步該做什么 |
| UIDataPicker | 日期選擇 | 選擇日期 |
| UIProgressView | 進度條 | 水平進度條,比如顯示文件的下載進度,程序的啟動進度 |
| UISlider | 滑塊 | 在2個數(shù)值之間滑動選擇,比如調(diào)節(jié)音量大小 |
| UIActivityIndicator | 圈圈 | 一直在轉(zhuǎn)圈圈,表示讓用戶等待 |
| UISegementControl | 選項卡 | 在固定的幾個選項之間進項選擇 |
| UIToolbar | 工具條 | 一般顯示在底部或者是鍵盤的頂部,里面有幾個小按鈕 |
一、響應(yīng)者鏈
檢測觸碰視圖:觸碰到屏幕->UIApplication -> window -> viewController -> view -> 檢測所有子視圖【直到檢測到所觸碰的視圖】
處理觸摸事件:觸摸的子視圖 -> view -> viewController -> window -> UIApplication->硬件【因為最終的事件處理還是需要硬件來完成】
二、多線程開發(fā)(NSthread、NSOperationQueue、GCD)
iOS中實現(xiàn)多線程的方式有四種
2.1、NSThread
輕量級別的多線程技術(shù),需要我們手動來管理線程。提供的方法比較少,例如:串行、并行這些它實現(xiàn)起來相當(dāng)困難
開辟子線程的方法有兩種:
(一)初始化,這個需要我們手動開啟線程,也就是調(diào)用start方法,并且有返回值,返回的就是NSThread對象。還可以設(shè)置線程名稱,設(shè)置線程的權(quán)限等級等一些參數(shù)。
(二)另一個是便利構(gòu)造器的方法開辟子線程,無返回值,會自動啟動線程,不需要手動調(diào)用start方法。
2.2、NSObject
只要是NSObject的子類或者對象都可以通過調(diào)用方法進入子線程和主線程。其實這些方法所開辟的子線程也是NSThread的另一種體現(xiàn)方式。
開辟子線程:-performSelectorInBackground: WithObject:
進入子線程:-performSelectorOnMainThread: WithObject: waitUntilDone:
延時執(zhí)行方法:-performSelector: WithObject: afterDelay:
2.3、NSOperationQueue
它是將一組事件添加到隊列中,如果想讓這組事件在主線程中執(zhí)行,那么就需要主隊列 [NSOperationQueue mainQueue]; 如果想將一組事件在子線程中執(zhí)行那么就需要其他隊列 [[NSOperaionQueue alloc] init]; NSOperation就是事件,它本身是一個抽象類,如果需要實現(xiàn)具體操作,需要它的兩個子類:NSInvocationOperation和NSBlockOperation;事件本身和線程無關(guān),只是看你將它添加哪種隊列中或者將事件放入哪種線程中。如果在隊列中想要使得事件順序執(zhí)行,需要給事件添加依賴關(guān)系,但是添加依賴關(guān)系的時候兩個事件不能互為依賴。也可以設(shè)置事件的優(yōu)先級來提高它先執(zhí)行的概率。但是不準(zhǔn)確。還可以設(shè)置隊列的最大并發(fā)執(zhí)行數(shù),來使得事件順序執(zhí)行。
2.4、GCD
GCD效率比operationQueue更高一些,功能更強大。目前要替代其他多線程方式的趨勢。它處理事件主要是通過隊列來執(zhí)行。
分為兩種隊列:一種是串行,一種是并行。系統(tǒng)提供給我們的是一種全局隊列,一種是主隊列。添加事件的函數(shù)為dispatch_async(); 一般我們都是用異步添加事件,最重要的原因就是它不會阻塞當(dāng)前進程。全局隊列中所添加的異步事件肯定都是在子線程中的,主隊列中添加的事件不管是異步還是同步都是在主線程中。
三、會手寫便利構(gòu)造器
注意autorelease寫在哪?
+(instancetype)personWithName:(NSString *)name andAge:(int)age {Person *person = [[[Person alloc] initWithName:name andAge:age] autorelease];return person; }四、UITableView、UITableViewController及其常用代理方法
TableView相關(guān)代理方法
代理方法: -(NSInteger)numberOfSectionsInTableView: // 共有多少個分區(qū) (如果不實現(xiàn)該代理方法,默認整個表視圖只有一個分區(qū)section) -(NSInteger)tableView:numberOfRowsInSection: // 每個分區(qū)返回的行數(shù) -(UITableViewCell *)tableView:cellForRowAtIndexPath: // 定義單元格(樣式和數(shù)據(jù)) -(void)tableView:didSelectRowAtIndexPath: // 點擊cell所響應(yīng)的代理方法 -(CGFloat)tableView:heightForRowAtIndexPath: // 設(shè)置每個cell的高度 -(NSString *)tableView:titleForHeaderInSection: // 為每個分區(qū)頭添加標(biāo)題 -(NSArray *)sectionIndexTitleForTableView: // 添加右側(cè)索引條 和編輯有關(guān)的代理方法 -(void)setEditing:animated: // 設(shè)置表視圖的編輯狀態(tài),也就是是否可被編輯 (【特別注意】此方法是重寫系統(tǒng)方法,不是UITableView的代理方法) -(BOOL)tableView:canEditRowAtIndexPath: // 設(shè)置可編輯狀態(tài)下的表視圖 (哪個單元格可編輯) -(UITableViewCellEditingStyle)tableView:editingStyleForRowAtIndexPath: // 設(shè)置編輯樣式 -(void)tableView:commitEditingStyle:forRowAtIndexPath: // 編輯完成后執(zhí)行的代理方法 (刪除數(shù)據(jù)、單元格,添加數(shù)據(jù)、單元格) -(BOOL)tableView:canMoveRowAtIndexPath: // 設(shè)置可以移動的單元格 -(void)tableView:moveRowAtIndexPath:toIndexPath: // 移動完成后執(zhí)行的代理方法 (原理是先刪除原來位置的數(shù)據(jù),再把原來位置的數(shù)據(jù)添加到新位置)五、OC的內(nèi)存管理、深拷貝與淺拷貝
深拷貝拷貝的是內(nèi)容,淺拷貝拷貝的是地址
六、會手寫完整的set、get、方法,以及懶加載
【特別注意】setter方法中嚴禁使用“.”語法。因為為造成死循環(huán)。
七、UIController及其子類整理
熟悉整個OC及其UI的系統(tǒng)類之間的繼承關(guān)系
繼承關(guān)系:NSObject - UIResponder - UIView - UIControl
八、跟坐標(biāo)有關(guān)的bounds、frame、center之間的關(guān)系
frame:是自身以其父view上的左上角為坐標(biāo)原點
bounds:是以其自身左上角為坐標(biāo)原點
九、整個應(yīng)用程序的啟動流程 、及應(yīng)用的代理方法
十、會手寫一個協(xié)議的代理方法
定義屬性代理用assign修飾(原因:防止循環(huán)引用)
十一、UIScrollewView的常用屬性及其代理方法
十二、手寫單例(保護線程安全)
保護線程安全:方法鎖,GCD中的dispath...
12.1 用互斥鎖
12.2 用GCD
static Singleton *singleton = nil; +(Singleton *)sharedSingleton {static dispatch_once_t onceToken;dispatch_once(&onceToken, ^ { if (singleton == nil) { singleton = [[Singleton alloc] init]; } }); return singleton; }十三、集合視圖的常用屬性和代理方法(layOut布局類)
UICollectionView有一個布局類
十四、MVC框架
MV之間通信(不能直接通信) CV之間通信(點擊事件)
Model:模型
View:視圖
ViewController:視圖控制器
十五、UINavigationController導(dǎo)航控制器相關(guān)的
十六、網(wǎng)絡(luò)請求 關(guān)鍵類
GET同步、異步(block、代理)請求
POST同步、異步(block、代理)請求
十七、UITableBarController 及其相關(guān)控件屬性方法
十八、數(shù)據(jù)持久化方式
①寫入文件
②歸檔反歸檔
③數(shù)據(jù)化
數(shù)據(jù)持久化的方式:
①寫入文件 (最大的缺陷:1. 只能就行簡單對象的寫入,即NSString,NSArray,NSDictionary,NSData 2. 不能進行靈活的單條的操作。每次進行修改的時候,只能整個讀取出來,然后修改后,整個寫入) (優(yōu)點是:操作簡單方便)
②歸檔、反歸檔 (針對復(fù)雜對象,缺點也是不能進行靈活的單條操作)
③寫入數(shù)據(jù)庫(sqlite3)-輕量級別的數(shù)據(jù)庫(嵌入式數(shù)據(jù)庫) (缺點和優(yōu)點與上面相反)
十九、動畫
動畫的原理:思考?
與UIView相關(guān)的動畫
19.1.1.類方法 動畫塊
[UIView beginAnimation:context:] // 動畫開始
/這里設(shè)置動畫的一些屬性/
[UIView commitAnimation]; // 提交剛才設(shè)置好的動畫屬性,其實是提交之后后動畫才開始執(zhí)行的
19.1.2.類方法 block(一共有四種)
(一)只是動畫執(zhí)行部分
(二)多了一個compilation參數(shù) :是說動畫執(zhí)行完成之后 所要作的操作寫在該參數(shù) block中
(三)可以設(shè)置options,也就是動畫的線性屬性等一些相關(guān)的配置
(四)spring動畫,就是果凍效果,也可以說是彈性效果,多了阻尼和動力兩個參數(shù)。使動畫看起來有彈性,參考scrollView滑動到邊緣的時候那種彈性效果
19.1.3.類方法 過渡動畫(動畫塊和block方式都可以實現(xiàn))
[UIView “transition……”];
19.1.4. 2D仿射變化函數(shù)
(一)旋轉(zhuǎn)rotation
(二)縮放scale
(三)位移translation
19.1.5. UIImageView的動畫(動圖)
19.1.6. UIActivityView的動畫(小菊花,加載等待)
與layer層相關(guān)的動畫
19.2.1. 對錨點和position的認識
19.2.2. layer的相關(guān)屬性
19.2.3. layer層所有的動畫都繼承于CAAnimation
19.2.4. CATransition過渡動畫
type設(shè)置動畫效果
subType設(shè)置動畫方向【特別注意】Fade要配合使用視圖的隱藏或者顯示屬性(hidden)使用
19.2.5. CAPropertyAnimation 也是抽象類,有兩個子類 CABasicAnimation、CAKeyFrameAnimation
CABasicAnimation可以通過layer層的旋轉(zhuǎn)、縮放、位移 是通過keyPath屬性得到隱式動畫。這里記得每一個隱式動畫的開始都需要transform開頭,因為它設(shè)置的是3D仿射變換函數(shù)的屬性
CAKeyFrameAnimation它主要設(shè)置layer層的position屬性,也是通過keyPath獲得屬性路徑。
19.2.6. CATransitionGroup是將多個動畫組合起來。本身不具備動畫特性。
19.2.7. 3D仿射變換函數(shù) 它與2D之間的區(qū)別為:2D是針對 UIView 的transform來設(shè)置的,3D是針對于 layer 的transform來設(shè)置的。多了一個Z軸
數(shù)據(jù)庫緩存、動畫的大量使用(兩大亮點)
二十、多線程
1.進程
系統(tǒng)中正在運行的 一個應(yīng)用程序就是 一個進程
進程之間是相互獨立的
進程只會在內(nèi)存中開辟內(nèi)存空間
2.線程(干活的)
線程是進程的基本執(zhí)行單元,可以說線程是進程的真正執(zhí)行者
一個進程最少有一個線程【如果一個進程只有一個線程,那么這個線程稱為主線程或者UI線程】
一個線程中任務(wù)的執(zhí)行是串行(順序執(zhí)行)的
如果想要同時執(zhí)行多個任務(wù),就需要多個線程,每條線程可以并發(fā)(同時)執(zhí)行不同任務(wù)
*注釋:這里的同時并不是真正的同時,下面會詳細說到
多線程概念:
其實多線程可以理解為多個人,每個人在一個時間只能干一個活,要想一個人干多個任務(wù),那么只能順序執(zhí)行。而如果有多個人的話,那么就可以在相同的時間段內(nèi)讓不同的人去干不同的活。所以多線程可以提高程序的執(zhí)行效率。
多線程原理:
上面的同時我用波浪線畫了出來,這里的同時其實只是一個假象,并不是真正的同時。因為CPU只有一個,而所有的運算都需要CPU來進行計算。所以線程在這里被CPU處理的時候同時也只能處理一個,但這里CPU是怎樣處理多線程的呢?我們知道CPU的執(zhí)行效率非???#xff0c;CPU在這里其實它是給每個線程分配非常短的時間來快速的在線程之間中來回調(diào)度(切換)執(zhí)行,由于這個時間段非常非常短,所以給我們造成了一個多線程同時被CPU執(zhí)行的一個假象。
所以,如果線程非常非常多的時候,會消耗大量的CPU資源,而且CPU分配給每個線程的頻率也會降低,這樣就會造成效率的下降。
所以,一般我們會開辟1-3個線程,最多也不要超過5個。這樣就能保證CPU的一個執(zhí)行效率。
NSThread
NSLog(@“%@”, [NSThread currentThread]); // 打印當(dāng)前代碼段所在的線程
NSLog(@“%@”, [NSThread mainThread]); // 打印主線程的信息?
假設(shè)run是一個耗時操作
(一)創(chuàng)建線程方式一
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
[thread start];
(二)創(chuàng)建線程方式二
[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];
thread.name = @“第一個子線程”; // 設(shè)置子線程的名稱
thread.threadPriority = 1; // 優(yōu)先級。參數(shù)是一個浮點數(shù),取值范圍是0-1。默認值是0.5。開發(fā)中一般我們不去修改線程的優(yōu)先級。
(一)阻塞進程
+(void)sleepUntilDate:(NSDate?)date;
+(void)sleepForTimeInterval:(NSTimeInterval?)tl;
(二)強制停止線程
+(void)exit; // 一旦強制終止,就不能重新啟動代碼,而且后面的代碼不會執(zhí)行。
另附一套基礎(chǔ)檢測題
※ 選擇題(共25題,每題3分) 1、以下對響應(yīng)鏈說法錯誤的是: 答案:(A)A、當(dāng)事件發(fā)生的時候,響應(yīng)鏈?zhǔn)紫缺话l(fā)送給第一個響應(yīng)者B、事件將沿著響應(yīng)者鏈一直向下傳遞,直到被接受并作出處理C、如果整個過程都沒有響應(yīng)這個事件,則該事件最終要由APP Delegate做出處理D、一般情況下,在響應(yīng)鏈中只要有對象處理事件,事件就會被傳遞 【A.發(fā)送給屏幕,再到應(yīng)用程序—>.....】 2、以下對多線程開發(fā)的理解錯誤的是: 答案:(C)A、發(fā)揮多核處理器的優(yōu)勢,并發(fā)執(zhí)行讓系統(tǒng)運行的更快、更流暢,用戶體驗更好B、多線程程序中,一個進程包含2個以上的線程(含2個)C、大量的線程降低代碼的可讀性,但不需要更多的內(nèi)存空間D、當(dāng)多個線程對同一個資源出現(xiàn)爭奪的時候要注意線程安全的問題 【C.開辟線程會占用內(nèi)存空間】 3、實現(xiàn)一個生成Student實例對象的便利構(gòu)造器的正確寫法是: 答案:(A)A、 + (id)studentWithName:(NSString *)newName andAge:(int)newAge {Student *stu = [[[Student alloc] initWithName:newName andAge:newAge] autorelease];return stu; }B、 - (id)studentWithName:(NSString *)newName andAge:(int)newAge {Student *stu = [[Student alloc] initWithName:newName andAge:newAge];return [stu autorelease]; }C、 - (void)studentWithName:(NSString *)newName andAge:(int)newAge {Student *stu = [[Student alloc] initWithName:newName andAge:newAge];return [stu autorelease]; }D、 + (void)studentWithName:(NSString *)newName andAge:(int)newAge {Student *stu = [[Student alloc] initWithName:newName andAge:newAge];return [stu autorelease]; } 【+號類方法,初始化方法都有返回值】 4、獲取tableview正在window上顯示的cell的indexPath方法是: 答案:(B)A、- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath;B、- (NSArray *)indexPathsForVisibleRows;C、- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;D、- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath; 【A.獲取cell CD互為取反】 5、下面關(guān)于深拷貝與淺拷貝理解正確的是: 答案:(A)A、深拷貝拷貝的是內(nèi)容,淺拷貝拷貝的是指針。B、深拷貝和淺拷貝最大的區(qū)別就是子類對象的地址是否改變。C、深拷貝是對對象本身復(fù)制,但是不對對象的屬性進行復(fù)制。D、如果子類對象的地址改變那么就是深拷貝。 【B.有歧義 C.內(nèi)存空間的地址一樣 ,指針的地址不一樣,但是不能作為唯一判斷標(biāo)準(zhǔn) C.全部拷貝 D.不一定】 6、關(guān)于OC內(nèi)存管理方面說法錯誤的是: 答案:(B)A、OC中的內(nèi)存管理采用引用計數(shù)機制B、autorelease pool 是OC中一種自動的垃圾回收機制C、alloc、new或copy來創(chuàng)建一個對象,那么你必須調(diào)用release或autoreleaseD、OC的內(nèi)存管理機制本質(zhì)上還是C語言中的手動管理方式,只不過稍加了一些自動方法 【B.autorelease pool 是需要人為或者代碼干涉(ARC下需要系統(tǒng)幫助)】 7、以下的代碼會出現(xiàn)什么問題: @implementation Person - (void)setAge:(int)newAge {self.age = newAge; } @end 答案:(B)A、會造成循環(huán)引用B、會造成死循環(huán)C、會出現(xiàn)內(nèi)存泄露D、會出現(xiàn)野指針 【B.set、get方法中不可以用self. 造成死循環(huán)】 8、對于UIScrollViewController,scrollView將開始降速時,執(zhí)行的方法是: 答案:(D)A、- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;{ }B、- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;{ }C、- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView;{ }D、- (void)scrollViewWillBeginDecelerating: 【A.手指開始拖拽 B.已經(jīng)靜止 C.動畫已經(jīng)停止】 9、以下哪個控件不是繼承于UIControl 答案:(D)A、UIButtonB、UITextFieldC、UISliderD、UITextView 【ABC是, D是繼承于UIScrollView】 10、下面對UIView、UIWindow和CALayer理解錯誤的是: 答案:(C)A、UIView繼承于UIResponderB、UIResponder繼承于NSObject,UIView可以響應(yīng)用戶事件。C、UIResponder繼承與NSObject,CALayer繼承于NSObject,CALayer可以響應(yīng)事件。D、UIView是用來顯示內(nèi)容的,可以處理用戶事件,CALayer是用來繪制內(nèi)容的,依賴與UIView來進行顯示 【C.CALayer不可以響應(yīng)事件,只負責(zé)內(nèi)容的呈現(xiàn)?!?11、以下關(guān)于視圖的frame與bounds的理解錯誤的是: 答案:(A)A、bounds是指這個view在window坐標(biāo)系的坐標(biāo)和大小B、frame指的是這個view在它superview的坐標(biāo)系的坐標(biāo)和大小C、frame和bounds是UIView中的兩個屬性(property)。D、一個是以自身左上角的店為原點的坐標(biāo)系,一個是以屏幕左上角的點為原點的坐標(biāo)系。 【A.自身的】 12、以下哪個方法在當(dāng)程序?qū)⒁顺鰰r被調(diào)用,且通常在此方法里寫一些用來保存數(shù)據(jù)和一些退出前的清理工作。 答案:(B)A、- (void)applicationExitsOnSuspend:(UIApplication *)application{ }B、- (void)applicationDidEnterBackground:(UIApplication *)application{ }C、- (void)applicationWillTerminate:(UIApplication *)application{ }D、- (void)applicationDidFinishLaunching:(UIApplication *)application{ } 【B.當(dāng)程序進行保存重要數(shù)據(jù)垃圾處理的時候都是在進入后臺以后做的】 13、很多內(nèi)置類如UITableViewController的delegate屬性都是assign而不是retain,這是為了: 答案:(D)A、防止造成內(nèi)存泄露B、防止出現(xiàn)野指針C、防止出現(xiàn)過度釋放D、防止循環(huán)引用 14、以下不屬于ios中實現(xiàn)多線程的方法是: 答案:(D)A、NSThreadB、NSOperationQueueC、Grand Central Dispatch(GCD)D、NSURLRequest 【D是網(wǎng)絡(luò)請求有關(guān)的】 15、對于UISearchBar,要實現(xiàn)實時搜索(即搜索內(nèi)容實時發(fā)生變化時),會執(zhí)行以下哪個方法: 答案:(C)A、- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar;B、- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar;C、- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{ }D、- (void)searchBarResultsListButtonClicked:(UISearchBar *)searchBar{ } 【searchBar searchBarController 兩個控件,多看一下代理方法 】 16、以下關(guān)于導(dǎo)航欄外觀屬性對應(yīng)的解釋錯誤的是: 答案:(D)A、barStyle bar的樣式B、translucent bar的透明度C、backgroundImage bar的背景圖片D、barTintColor bar上控件的顏色 【barTintColor bar本身的前端顏色】 17、當(dāng)程序從后臺將要重新回到前臺的時候,會先執(zhí)行以下哪個方法: 答案:(B)A、- (void)applicationDidFinishLaunching:(UIApplication*)application{ }B、- (void)applicationWillEnterForeground:(UIApplication *)application{ }C、- (void)applicationDidBecomeActive:(UIApplication *)application{ }D、 - (void)applicationWillTerminate:(UIApplication *)application{ } 【A應(yīng)用程序加載完畢,做一些配置工作 C進入前端變的活躍 D將要結(jié)束】 18、實現(xiàn)一個singleton的類,下面正確的是: 答案:(A)A、 static LOSingleton * shareInstance; + ( LOSingleton *)sharedInstance{@synchronized(self){if (shareInstance == nil) {shareInstance = [[self alloc] init];}}return shareInstance; } 【+類方法 返回值】B、 static LOSingleton * shareInstance; - ( LOSingleton *)sharedInstance{@synchronized(self){if (shareInstance == nil) {shareInstance = [[self alloc] init];}}return shareInstance; }C、 + (LOSingleton *) sharedInstance {LOSingleton *sharedInstance = nil ;static dispatch_once_t onceToken; dispatch_once (& onceToken, ^ { sharedInstance = [[self alloc] init];});return sharedInstance; } 【少了static】D、 - (LOSingleton *) sharedInstance {static LOSingleton *sharedInstance = nil ;static dispatch_once_t onceToken; dispatch_once (& onceToken, ^ { sharedInstance = [[self alloc] init];});return sharedInstance; } 19、當(dāng)應(yīng)用程序?qū)⒁M入非活動狀態(tài)執(zhí)行,在此期間,應(yīng)用程序不接收消息或事件,比如來電話了,此時會先執(zhí)行以下哪個方法: 答案:(D)A、- (void)applicationDidBecomeActive:(UIApplication *)application{ }B、- (void)applicationDidEnterBackground:(UIApplication *)application{ }C、- (void)applicationWillTerminate:(UIApplication *)application{ }D、- (void)applicationWillResignActive:(UIApplication *)application{ } 20、應(yīng)用程序啟動順序正確的是: ①在UIApplication代理實例中重寫啟動方法,設(shè)置第一個ViewController ②程序入口main函數(shù)創(chuàng)建UIApplication實例和UIApplication代理實例 ③在第一個ViewController中添加控件,實現(xiàn)對應(yīng)的程序界面。 答案:(B)A、①②③B、②①③C、①③②D、③①② 【考察應(yīng)用程序啟動流程】 21、對于UICollectionViewController,實現(xiàn)定義每個元素的margin(邊緣 上-左-下-右) 的方法是: 答案:(B)A、 - (CGSize)collectionView:(UICollectionView *)collectionViewlayout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { return CGSizeMake(); }B、 - (UIEdgeInsets)collectionView:(UICollectionView *)collectionViewlayout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { return UIEdgeInsetsMake(); }C、 - (CGSize)collectionView:(UICollectionView *)collectionViewlayout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section { return CGSizeMake(); }D、 - (CGSize)collectionView:(UICollectionView *)collectionViewlayout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section { return CGSizeMake(); } 【請熟悉集合視圖的代理方法】 22、以下對于UIScrollView的屬性,說法錯誤的是: 答案:(D)A、bounces 控制控件遇到邊框是否反彈B、pagingEnabled 控制控件是否整頁翻動C、scrollEnabled 控制控件是否能滾動D、contentInset 滾動范圍大小 【contentset 滾動范圍大小 contentInset設(shè)置邊框】 23、對于UIScrollViewController,監(jiān)控目前滾動的位置的屬性是: 答案:(A)A、contentOffSet 偏移量B、contentSize 滾動范圍C、contentInset 設(shè)置邊框(上坐下右)D、scrollIndicatorInsets 滾動條的邊框內(nèi)距 24、在MVC框架中,M與C通訊,通常使用什么方式? 答案:(A)A、KVO與通知B、協(xié)議-代理C、類目D、屬性 【協(xié)議-代理是C和V之間】 25、對于UILabel,設(shè)置單詞折行方式的屬性是: 答案:(B)A、textAlignmentB、lineBreakModeC、numberOfLines 【設(shè)置為0,自動換行】D、sizeToFit 【自適應(yīng)label】 ※ 判斷題(共5題,每題5分) 1、UISlider、UISwitch、UITextField這些類都繼承于UIControl這個類。 答案:(T)正確錯誤 2、[textField resignFirstResponder]; 表示讓文本輸入框成為第一響應(yīng)者, 彈出鍵盤進入編輯模式。 答案:(F)正確錯誤 【取消第一響應(yīng)者】 3、[self.view popToViewController: animated: YES];表示彈出一個視圖控制器,到指定視圖控制器上。 答案:(F)正確錯誤 【pop 出棧 返回】 4、numberOfTapsRequired這個方法能獲取到的是有幾只手指點擊。 答案:(F)正確錯誤 【numberOfTapsRequired 輕拍幾次、 numberOfTouchesRequired 獲取到的是有幾只手指點擊】 5、[segmentedControl titleForSegmentAtIndex: ]表示指定索引文字的選項。 答案:(T)正確錯誤?
[關(guān)閉]轉(zhuǎn)載于:https://www.cnblogs.com/xjy-123/p/5163170.html
總結(jié)
以上是生活随笔為你收集整理的iOS开发知识点总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 重读js高程笔记二
- 下一篇: 个税app怎样注册 大厅注册码注册和人脸