你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS開發中的零碎知識點筆記 韓俊強的博客

iOS開發中的零碎知識點筆記 韓俊強的博客

編輯:IOS開發綜合

1.關聯

objc_setAssociatedObject關聯是指把兩個對象相互關聯起來,使得其中的一個對象作為另外一個對象的一部分。

2.tableView的beginUpdates 和 endUpdates

3.關於代碼與storyBoard的自動布局

4.國際化與本地化,為了實現全球化

5.技巧

可以通過設置Scheme來設置app所運行的語言,你想要什麼語言就是什麼語言,而不用重新設置系統的語言。

6.ios8新特性,加載js

如果我想要加載一個形如網頁的東西,那麼我需要對整個網頁進行動態的編輯,圖文混編,但是這樣做那面會帶來很困難的操作,其實服務端那邊很好的可以解決這個問題,用一個網頁即可以搞定。服務端那邊只需返回一個html文檔,然後客戶端根據這個html文檔進行解析即可。

WKWebView新特性:

在性能、穩定性、功能方面有很大提升(最直觀的體現就是加載網頁是占用的內存,模擬器加載百度與開源中國網站時,WKWebView占用23M,而UIWebView占用85M);

允許JavaScript的Nitro庫加載並使用(UIWebView中限制);

支持了更多的HTML5特性;

高達60fps的滾動刷新率以及內置手勢;

將UIWebViewDelegate與UIWebView重構成了14類與3個協議

7.技巧

寫函數的時候一定要判斷數據的安全性,這樣出錯的幾率就會很小,尤其是要判斷它的類型安全,是否為空等,不然程序會奔潰。還有需要注意的地方就是,寫每一個函數的時候要多方面進行考慮,考慮代碼的合法性。使用前不判斷參數的正確性,在函數內部對參數的可靠性進行判斷。如果這樣的話,你用到函數的時候都需要對這些參數進行判斷其合法性如果放倒函數中那麼只需要判斷一次就可以了。

8.應用內購買

9.sqlite

利用sqlite創建索引,索引是關系數據庫中用於存放每一條記錄的一種對象,主要目的是加快數據的讀取速度和完整性檢查。索引是對數據庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問數據庫表中的特定信息。

10.數據庫版本的更新,當應用數據表需要添加新表的時候,需要對數據插入新的字段,那麼久需要更新數據庫

11.友盟統計

當應用上線後可以觀察到應用的日志文件,crash日志,頁面記時日志,收集並歸類崩潰日志,提供錯誤管理及分析工具,幫助開發者更好的解決問題,從而提高應用的穩定性,改善應用質量。

12.可以獲取手機上的語言?你知道嗎

13.使用js的時候需要使用webView

[webView stringByEvaluatingJavaScriptFromString:scriptString];
 

14.做常用設備登陸的策略可以使用服務器,服務器把所有登陸過的設備都存儲下來。

15.涉及到系統偏好設置的選項,把它都放到一個文件中,這樣修改起來比較容易。

16.利用VVDocumenter-Xcode

自動生成注釋,也就是xcode的插件.運行VVDOcumenter-Xcode編譯後,重新打開xcode即可以使用了

17.如何使用xib進行界面的搭建

利用file’s owner進行關聯,形如storyBoard中的segue

18.如何在一個項目中使用多個storyBoard

19.如何利用代碼與storyBoard或者XIB進行自動布局

20、XIB進行國際化

首先在工程中需要添加你想要使用的語言,然後新建視圖的時候選擇使用XIB,這樣xcode就會自動為你新建一個xib文件,然後在inspector中的localization中選擇localized,開始時一定要選擇base,然後勾選其他語言,這樣你發現XIB文件會有子目錄,然後在子目錄下你可以設置不同的語言翻譯。

21.tableView小技巧

根據設置不同的identifier取出不同類型的cell,在設置identifier的時候可以設置成類名,這樣的話就可以省很多事,而且很方便。

22. 技巧

[[UIApplication sharedApplication] setStatusBarHidden:YES];
 

23.版本控制

gitLab和sourceTree結合使用對源代碼進行管理,如何進行相關的配置

24.發送語音消息

三方庫opencore-amr

25.Sqlcipher+FMDB,數據庫文件加密

https://www.zetetic.net/sqlcipher/ios-tutorial/

26.技巧

圖片浏覽XHImageViewer

28.技巧

根據button的不同狀態可以設置button的事件,相當於微信發送語音信息的按鈕,按住錄音,松開結束錄音並發送消息,

29.技巧

把block指針變量設置成私有的,這樣是不是很好用。

30.功能說明

1
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(overtimeRemind) object:nil];

先看這段代碼:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(showLeft) object:nil];
    [self performSelector:@selector(showLeft)];
}
 

為什麼[self performSelector:@selector(showLeft)];前面還需要調用cancelPreviousPerformRequestsWithTarget:self方法呢?

那是因為有時候我們通過[self performSelector:@selector(showLeft)];來實現showLeft方法,可能會出現延遲執行或內存洩漏的問題,而前面加上這句話:

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(showLeft) object:nil];

可以先將這在執行的方法取消,在繼續執行,有效避免了上述兩個問題。

31.runLoop

關於runloop的一些了解,runloop是一種運行池,是和多線程有關的東西,監聽事件的產生,如果有新事件,那麼runloop會監聽,一旦監聽到了,就會執行監聽到的方法。

32.技巧

關於用戶頭像的問題,點擊放大,等其他手勢的庫ESImageViewController

33.技巧

1
NSString *pullSuccessIdString = [pullSuccessMsgIds componentsJoinedByString:@","];
 

把數組中的每個元素用逗號拼接成一個字符串

34.數據共享

Multipeer Connectivity Framework ,近距離通信,雙方建立連接後可以彼此進行通信

35.問題

oc中不支持多繼承,也就說一個類只能繼承至一個類,不能繼承多個類。實現多繼承可以使用協議來實現,也就說某個類中可以繼承多個協議,這久相當於多繼承,我可以擁有很多協議並且實現它。

36.multipeerConnectivity的實現,對文件進行共享

37.indexPathForSelectedRow

38.如何給另一台電腦進行真機調試

《1》導出p12文件

《2》導出描述文件

《3》在另一台電腦上雙擊即可以安裝了

39.問題

1
[[NSBundle mainBundle] pathForResource:@"quickLookWord" ofType:@"docx”];

找不到文件目錄,[NSBundle mainBundle]其獲取的路徑是你程序的安裝路徑下的資源文件位置。 在xcode中采用add file to 方式添加文件時,一般情況下xcode會自動將文件添加到你的資源文件,而且,這些文件在你工程的 build Phases中的 copy Bundle Resources中可以查看到。但是有時候,由於xcode的問題,采用add files to 不能自動添加到你的資源文件中,這時,可以采用copy Bundle Resources下面的“+”號,手動將文件添加到你的資源文件中,這樣就可以解決問題了。

40.功能實現

實現文件的一些操作,包括文件的近距離通信,MC,AirDrop,文件預覽

41.Uniform Type Identifiers (UTIs)統一標示符(UTIs)

當你把圖片分享之其他iOS設備,接收方會自動打開拍照類app並加載圖片。如果你傳遞的是PDF文件,接收方設備可能會提示你選擇一個app來打開文件,或者直接在iBooks中打開。iOS是如何知道哪個app適合什麼樣的數據類型呢?

在系統中,蘋果用UTIs來處理數據類型的標示。簡單的說,一個uti是用來標示特定類型的數據或文件。例如,com.adobe.pdf標示一個pdf文件,而public.png代表一個PNG圖片。在這裡可以查看已經在系統中注冊了的完整的UTIs清單。(love cc cat)應用程序可以打開在iOS系統中已經注冊了的UTI。因此無論文件是否被打開,iOS都會用特定的程序打開這個文件。

42.關於info.plist文件的操作

NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
NSString *name = [infoDictionary objectForKey:@"CFBundleName"];
NSString *version = [infoDictionary objectForKey:@"CFBundleVersion"];
 

43.URL Scheme

是類似http://,ftp://,afp://這樣的東西,通常是用傳輸協議作為URL Scheme。不過事實上,你可以在iOS和Mac中注冊任何類型的URL Scheme。當用戶在浏覽器中訪問你的自定義URL Scheme的鏈接的時候,操作系統就會打開你的程序,響應這個請求。

要在程序中注冊自定義URL Scheme非常簡單。主要分為兩個步驟:在程序的Info.plist中加入你需要注冊的URL Scheme,然後在你的應用程序中加入處理這類請求的代碼。

其中,第一個步驟對於iOS和Mac應用程序來說是完全相同的。方法如下:

在Info.plist中,增加一個字段,名稱為CFBundleURLTypes(URL Types)。Xcode會自動為你創建一個必須的鍵:URL Identifier(CFBundleURLName),這個鍵的值可以賦值為一個唯一的字符串。通常是逆向的域名結構,如:me.venj.myapp。然後在URL Types這個鍵下增加一個子項:CFBundleURLSchemes(URL Schemes),這裡填入你想注冊的URL Scheme的名稱,如:cloud。你可以增加多個URL Scheme。

44.在我的APP中打開其他的App

那怎樣來制作從一個應用打開其他應用,這其實很簡單,打開info.plist,添加一項URL types,展開URL types,再展開Item1,將Item1下的URL identifier修改為URL Scheme,展開URL Scheme,將Item1的內容修改為myapp其他程序可通過myapp://訪問此自定義URL。其實就是類似下面的樣式。

https://appsto.re/cn/YSJRZ.i

45.問題

添加約束後,當想改變約束的時候,可以更具約束獲得約束的值。比如我設置了高的約束是20,那麼我以後想把高的約束改為40,那我咋麼辦,我需要根據這個約束進行修改。或者我需要根據某個約束獲取起約束的值,那麼我也需要根據約束來獲得它的值。

46.關於自動布局修改約束

如果給一個視圖添加了約束,你可以修改約束,來改變之前所添加的約束

ContentHightConstraint.constant = 150; 修改之前的約束

47.用通知中心的缺點別人看代碼比較

48.問題

NSTimer不能歸檔持久化,只有實現了NScode協議的才能持久化,即使是歸檔也不好使,不知道有沒有一種方法可以進行序列化

49.技巧

在iOS7之後我們可以用UIFont的preferredFontForTextStyle:類方法來指定一個樣式,並讓字體大小符合用戶設定的字體大小。通過手機設置app字體的大小。目前可供選擇的有六種樣式:

50.mac終端命令

vi 文件名

q!強制退出

i編輯模式

esc commend 模式 shift +double click z 保存並推出

cat 文件名,查看文件內容

51.Debug的一些有用的操作

截取屏幕圖,debug---》view debugging ——>take screenshot of iPhone

查看view的frame debug ——> show view frame

52.真正懂得自動布局嗎?

自動布局會自動根據約束進行計算view的frame,所以你添加的約束必須保證能正常就算出view的frame,如果不能那麼你就需要添加約束,也就是說,你既不能多添加了約束也不能少添加約束,UILAbel如果不添加高度約束,它會自動幫你計算出高度的。總的來說,只要讓自動布局知道視圖的frame就行。如果不能知道,那麼會報錯

42.你的視圖有比較簡單的布局改變

當需要產生動畫或動態添加視圖時,autolayout就暴露了出我認為讓人抓狂的元凶——優先級(Priority)和布局沖突。 autolayout對於相同方位的約束,如都是描述離superview上邊緣距離的約束,如果這兩個約束的數值不同,但是優先級一樣,則 autolayout將報布局沖突,將會根據其計算丟棄某一條約束(這時可能就會丟棄你想要的約束,而恰恰保留了你不想看到的布局)。所以,當我們發生布 局變化時,無法像frame的絕對定位,直接改變,並且只有唯一的位置信息。那麼,我們該怎麼處理這種布局沖突呢?那就是讓描述相同但數值不同的這兩個約 束采用不同的優先級。autolayout默認將使用數值較大的優先級約束。?但是當我們新增了一個更高優先級約束改變了視圖布局,在完成一些操作後,又想變回去怎麼辦?這時就必須刪除更高優先級的約束。?所以,對於視圖有動態變更時,我的通常做法是:為需要變更的控件新增默認constraint,但對於這個默認constraint先降低優先級,在發生 變化時再新增一個更高優先級的constraint2,且代碼中用一個Dictionary緩存該constraint2的對象,便於我隨時刪除或重新新 增,讓視圖來回變化。

53.AD-hoc 是干什麼的

是在把app發布到store上進行測試用的。也就是說我把對方設備好添加進來,我打一個包給對方,對方就可以通過itune安裝這個ipa文件,就可以進行真機測試了,不需要通過xcode進行安裝了。

54.枚舉的定義方法

 
enum {
     UITableViewCellStyleDefault,
     UITableViewCellStyleValue1,
     UITableViewCellStyleValue2,
     UITableViewCellStyleSubtitle
};
typedef enum {
     UITableViewCellStyleDefault,
     UITableViewCellStyleValue1,
     UITableViewCellStyleValue2,
     UITableViewCellStyleSubtitle
} UITableViewCellStyle;
typedef NS_ENUM(NSInteger, UITableViewCellStyle) {
     UITableViewCellStyleDefault,
     UITableViewCellStyleValue1,
     UITableViewCellStyleValue2,
     UITableViewCellStyleSubtitle
};
typedef enum {
     UITableViewCellStyleDefault,
     UITableViewCellStyleValue1,
     UITableViewCellStyleValue2,
     UITableViewCellStyleSubtitle
};
typedef NSInteger UITableViewCellStyle;

55.如果頁面上的數據是在服務端,且服務端的信息可能會隨時改變。那麼我們需要把每次請求數據確保每次的數據是最行的數據。但是每次加載數據是不難免會很影響用戶體驗,所以我需要本地緩存數據。頁面先加載本地數據,然後在進行網絡請求加載數據。等網絡請求數據成功以後,在把新加載進來的數據更新UI

56.數據庫的一些操作

sqlite> CREATE TABLE testtable (first_col integer DEFAULT 0, second_col varchar DEFAULT 'hello');
sqlite> CREATE TABLE testtable (first_col integer UNIQUE);
sqlite> CREATE TABLE testtable (first_col integer CHECK (first_col < 5));
sqlite> ALTER TABLE testtable ADD COLUMN second_col integer;
sqlite> CREATE VIEW testview AS SELECT * FROM testtable WHERE first_col > 100;
sqlite> CREATE TEMP VIEW tempview AS SELECT * FROM testtable WHERE first_col > 100;
sqlite> DROP VIEW testview;
 

57.uitextView獲取光標的位置

 
int location = aTextView.selectedRange.location;

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved