iphone Objective-C ViewController之間傳值的方法

來源:互聯網
上載者:User

(對於在ViewController之間傳值)最簡單最專業的方法就是所謂的執行個體共用(shared instance)。基本的做法就是在最初調用的時候建立一個可以執行個體化這個類的單例的類方法(singleton),然後在接下來的調用中返回這個執行個體。

我們用一個棋盤遊戲中常見的Engine類來舉例說明:

Engine.h

[plain] view plaincopy

  1. #import   
  2. @interface Engine : NSObject {  
  3.     NSUInteger board[100];  // c-style array  
  4. }  
  5.    
  6. + (Engine *) sharedInstance;  
  7.    
  8. - (NSUInteger) getFieldValueAtPos:(NSUInteger)x;  
  9. - (void) setFieldValueAtPos:(NSUInteger)x ToValue:(NSUInteger)newVal;  
  10.    
  11. @end  

Engine.m

[plain] view plaincopy

  1. #import "Engine.h"  
  2.    
  3. @implementation Engine  
  4.    
  5. static Engine *_sharedInstance;  
  6.    
  7. - (id) init  
  8. {  
  9.     if (self = [super init])  
  10.     {  
  11.         // custom initialization  
  12.         memset(board, 0, sizeof(board));  
  13.     }  
  14.     return self;  
  15. }  
  16.    
  17. + (Engine *) sharedInstance  
  18. {  
  19.     if (!_sharedInstance)  
  20.     {  
  21.         _sharedInstance = [[Engine alloc] init];  
  22.     }  
  23.    
  24.     return _sharedInstance;  
  25. }  
  26.    
  27. - (NSUInteger) getFieldValueAtPos:(NSUInteger)x  
  28. {  
  29.     return board[x];  
  30. }  
  31.    
  32. - (void) setFieldValueAtPos:(NSUInteger)x ToValue:(NSUInteger)newVal  
  33. {  
  34.     board[x] = newVal;  
  35. }  
  36.    
  37. @end  

然後我們只需import這個類到我們的app delegate中同時加上如下幾行代碼:

[plain] view plaincopy

  1. // at the top: #import "Engine.h"  
  2.    
  3. Engine *myEngine = [Engine sharedInstance];  
  4.    
  5. [myEngine setFieldValueAtPos:3 ToValue:1];  
  6.    
  7. NSLog(@"pos 3: %d",[myEngine getFieldValueAtPos:3]);  
  8. NSLog(@"pos 2: %d",[myEngine getFieldValueAtPos:2]);  

你會發現你並沒有alloc-init這個類,只是不斷地取sharedInstance指標。實際上這個類方法在第一次調用時會建立一個執行個體,並將其儲存在靜態變數中。

你不必擔心release的問題,因為所有app佔用的記憶體空間將在其退出時被清空。但如果你想做得更好,你可以把sharedInstance的release放到app delegate的dealloc方法中。不過我發現這個dealloc其實從來沒有被調用過。我猜測是因為IOS認為kill掉這個app並釋放記憶體空間會更快速。

你還可以把其他與Engine類有關的方法和資料變數放入Engine類中。只是不要加入任何有關顯示它的內容。這樣Engine才能被重複使用。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.