1. 程式人生 > >IOS 小技巧積累(持續更新)

IOS 小技巧積累(持續更新)

1. 使用@property和@synthesize宣告一個成員變數,給其賦值是時要在前面加上"self.",以便呼叫成員變數的setmember方法。 

直接呼叫成員變數並且給其賦值:member=[NSString stringWithFormat:@””];將不執行setmember 方法。

使用self呼叫成員變數並且給其賦值:self.member=[NSString stringWithFormat:@””];將執行setmember方法。

2.延時函式: [NSThread sleepForTimeInterval:3];

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

3.實現隨機數:srandom(time(NULL));

4. #pragma mark -
#pragma mark Initialization
它們告訴Xcode編譯器,要在編輯器窗格頂部的方法和函式彈出選單中將程式碼分隔開;
注意
#pragma mark – 的“-”後面不能有空格。
如果你的標誌沒有出現在彈出選單中,比如沒有分隔線出現,請在Xcode選單 “Preferences..”中的 “Code Sense”選項取消選中”Sort listalphabetically”即可。

5.  我們通過傳送訊息給物件出發特定動作;物件傳送某些變化的時候通過回撥函式(callback)通知我們。物件在特定事件發生的時候,就會呼叫對應的回撥函式,觸發業務邏輯。


回撥函式通過所謂的代理(Delegation)來實現.

     delegate使用方法:

     @property (assign) <id>xxxDelegate delegate;

     正確的使用方法是使用assign屬性而不是retain。

     之所以對於delegate這類物件使用assign而不是用retain是為了防止迴圈retain(retain loop)。
     具體原因請移至:http://www.cnblogs.com/kimimaro/archive/2011/09/05/2167576.html

6. 程式設計習慣:定義Bool型別值時,@property(nonatomic,getter=isSoundOn) BOOL soundOn;

7.手動建立記憶體自動釋放池:

       NSAutoreleasePool *pool = [[NSAutoreleasePoolalloc]init];

       // TODO

       // 向物件傳送一條autorelese訊息時,就將該物件加入到自己手動建立的記憶體釋放池中。在此方法結束時呼叫[pool release],將釋放新增到該記憶體池的所有物件.

[pool release];

       // 如若在自動釋放池pool 呼叫release方法之後,某物件的retainCount不為0,該物件將繼續保持可用。

8.任何基本資料型別(包括char資料型別),可以通過使用NSNumber類根據這些資料型別來建立物件。

    NSNumber *myNumber, *floatNubmer;
    
    // long value
    myNumber = [NSNumber numberWithLong:0xabcdef];
    NSLog(@"%lx",[myNumber longValue]);          // 輸出:abcdef
    
    // char value
    myNumber = [NSNumber numberWithChar:'X'];
    NSLog(@"%c", [myNumber charValue]);          // 輸出:X
    
    // float value
    floatNubmer = [NSNumber numberWithFloat:100.00];
    NSLog(@"%g",[floatNubmer floatValue]);       // 輸出:100

9. 當把某一個物件以AddObject或者初始化的形式加入到Array,Dictionary中時,該物件retainCount將+1。

     當把某一個物件以remover的形式從Array,Dictionary移除時,該物件retainCount將-1。

     當使用copy 和mutableCopy 產生陣列副本時,陣列中每個元素的保持計數將+1。

10. 異常:exc_bad_access.

       引用物件已經釋放,即“魔鬼引用”。與VS中的“未將引用的物件應用到物件的例項”類似。

11. 更新UITableView資料問題:

        採用Sqlite3輕量級資料庫來儲存資料,通過除錯發現,資料庫中資料已更新,但UITableView並沒有更新。

        解決方法:performSelectorOnMainThread:@selector(reloaddata) withObject:nil waitUntilDone:YES

                 但datasource並沒有資料,需要重新載入資料。