1. 程式人生 > >ios 小技巧整理 不定時更新

ios 小技巧整理 不定時更新

1. 製作靜態庫時,真機和模擬器的庫檔案是不一樣的,因此要合併起來。

lipo -create ../Release-iphonesimulator/*.a  ../Release-iphoneos/libPrint.a  -output ../libPrint.a

2. NSlog只在debug狀態下打出,在release狀態下就無視掉。提高產品的效能。

先介紹幾個常用的巨集:

  •  __VA_ARGS__ 是一個可變引數的巨集,這個可變引數的巨集是新的C99規範中新增的,目前似乎只有gcc支援(VC6.0的編譯器不支援)。巨集前面加上##的作用在於,當可變引數的個數為0時,這裡的##起到把前面多餘的","去掉,否則會編譯出錯。
  •  __FILE__ 巨集在預編譯時會替換成當前的原始檔名
  •  __LINE__巨集在預編譯時會替換成當前的行號
  •  __FUNCTION__巨集在預編譯時會替換成當前的函式名稱
  • __OPTIMIZE__ 是release 預設會加的巨集
以下程式碼最好寫在“-Prefix.pch”裡面,預編譯檔案。
#ifndef  __OPTIMIZE__
    #define MyLOG(...)   NSLog(__VA_ARGS__) 
    #define MyPrintBaseLog	NSLog(@"%s(%d)", __FUNCTION__, __LINE__)
    #define MyDebugLog(s, ...)	NSLog(@"%s(%d): %@", __FUNCTION__, __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__])
#else
    #define MyLOG(...)
    #define MyPrintBaseLog
    #define MyDebugLog(s, ...)
#endif

更改debug和release狀態:

Edit Scheme -> Run project -> Build Configuration

3. ARC的問題

  • 1.在targets->build phases中修改compiler Flags屬性,新增:-fobjc-arc,就可以讓舊的工程支援arc;
  • 2.在targets->build phases中修改compiler Flags屬性,新增:-fno-objc-arc,就可以讓原來支援arc的工程不使用arc,對於大部分第三方類庫來說都可以順利編譯通過

4. 呼叫系統的工具

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://10086"]];  
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://10086"]]; 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://
[email protected]
"]];

補充:呼叫自己的app。

在如下URL Schemes 新增自定義的Scheme。然後就可以在Safari中輸入"begin://",啟動你的app了。當然後面也可以跟引數,例如:begin://test/path?p=1&q=2....


處理方法是

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url;  // Will be deprecated at some point, please replace with application:openURL:sourceApplication:annotation:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation NS_AVAILABLE_IOS(4_2); // no equiv. notification. return NO if the application can't open for some reason

保險起見,兩個方法最好都重寫一下。

5. 延時函式: 

[NSThread sleepForTimeInterval:3];
[self performSelector:@selector(machineBallAction) withObject:nil afterDelay:0];

6.記錄程式執行的時間。
clock_t begin = clock();
// do somethingclock_t end = clock();NSLog(@"used time:%f s",(end - begin)/(float)CLOCKS_PER_SEC);
7. 在適配不同版本的系統時,有一些方法在新版本里已經被代替了,但是舊版本又不支援新版本的方法,所以特殊情況下,要對系統版本進行判斷,然後分別實現兩種不同的方法,這樣在xcode裡面就會出現如下警告,作為優美程式碼的coder,當然不想看到折麼刺眼的東西。

下面給出一種方法來消除這樣的警告。

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
            //deprecated methods.
#pragma GCC diagnostic pop

同樣在“performSelector:withObject”的時候,如果selector是動態變化的,那麼也有警告,可以用類似的方法來消除

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
        [self performSelector:oneSelector withObject:object];
#pragma clang diagnostic pop

8. 快速清空subViews

[self.view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

9. trim掉string的空格
aString = [aString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

10. 新增自定義字型

首先將*.ttf檔案新增到工程中,然後在info.plist檔案中新增一個key, key的名字是Fonts provided by application,預設是array,然後將新增的字型檔名字寫到後面就行了。

在工程用的時候可以直接

[UIFont fontWithName:@"******" size:20.0];
如果名字不知道的話可以遍歷一下。

11. NSLOG

NSLog函式支援printf函式所有的格式和控制符號。而且它還可以支援%@來列印一個物件。當使用%@時,給物件傳送description訊息,description方法返回一個字串來代替%@。

符號                                          顯示

%@                                           id

%d,%D,%i                           long

%u,%U                                   unsigned long

%hi                                           short

%hu                                          unsigned short

%qi                                           long long

%qu                                          unsigned long long

%x,%X                                  16進位制列印unsigned long

%o,%O                                  8進位制列印 unsigned long

%f,%e,%E,%g,%G        double

%c                                            unsigned char-ASCII 字元

%C                                           unichar-Unicode 字元

%s                                            char* (以空字元結束的ASCII字元組成的字串)

%S                                           unichar* (以空字元結束的Unicode字元組成的字串)

%p                                            void* (以0x開頭的16進位制的地址空間)

%%                                          A%字元


不定時更新

部分內容來源於網上,不能一一列出出處,請恕罪。