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.任何基礎資料型別 (Elementary Data Type)(包括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並沒有資料,需要重新載入資料。