我對保留我的屬性和內存管理方面感興趣。這是一個簡單的應用程序,用於編輯存儲在表中的類的信息。有3個ViewController。簡單的應用程序結構。你怎麼看?
- 列表視圖(列表中的所有類)
- 所選項目 的細節視圖(列出選定類的屬性)
- 的編輯視圖(列出單個屬性選定類的
並允許它 編輯)
這是它如何構造目前,你怎麼看?
ListViewController
@屬性(非原子,保留)的NSMutableArray *池;
@property(nonatomic,retain)PoolFacilityEditController * childController;
一類新實例添加到您點擊運行此方法添加按鈕表..
//Loads up the editPoolFacility controller to add a new pool
- (無效){添加
PoolFacilityEditController *editController = self.childController;
PoolFacility *aPoolFacility = [[PoolFacility alloc] init];
[self.pools addObject:aPoolFacility];
[aPoolFacility release];
editController.thePoolFacility = aPoolFacility;
editController.pools = self.pools;
[self.navigationController pushViewController:editController animated:YES];
}
的下一個控制器現在被加載,這裏是它有趣的實例變量。是否明智我選擇只將池分配給新的控制器,而不是保留。我不想不必要地保留。
詳細視圖
@property (nonatomic, assign) PoolFacility *thePoolFacility; (assigned in the above add method)
@屬性(非原子,分配)的NSMutableArray *池; (也被分配在添加法)
詳細視圖具有執行以下操作的方法..
- (void)viewWillAppear:(BOOL)animated {
//Pass the copy onto the child controller
if (self.childController.thePoolFacility != self.thePoolFacility) {
self.childController.thePoolFacility = self.thePoolFacility;
}
}
池被傳遞到細節編輯控制器,以便它知道的池它正在編輯。
現在用戶單擊池信息的單個位(例如名稱)並彈出詳細視圖控制器。它允許編輯各個屬性。
很有趣的性質是這樣的:
@property (nonatomic, retain) PoolFacility *thePoolFacilityCopy;
@屬性(非原子,分配)PoolFacility * thePoolFacility;
它創建一個副本以便在用戶更改值然後取消時進行編輯。如果用戶按下保存,則將副本中的值複製到非副本中。
- (void)viewWillAppear:(BOOL)animated {
PoolFacility *poolCopy = [self.thePoolFacility copy];
self.thePoolFacilityCopy = poolCopy;
[poolCopy release];
}
如果保存或取消被按壓被彈出的圖。
然後我們又回到了顯示所有領域的中間視圖。
現在,如果用戶按下保存我只是poptheviewcontroller,我們又回到了列表視圖。或者如果用戶按下取消我運行這個方法。
-(void)cancel {
[self.pools removeObject:self.thePoolFacility];
[self.navigationController popViewControllerAnimated:YES];
}
所以總結
我整個不同的視圖控制器分配屬性,而不是保留它。
而且我的視圖控制器只加載一次,當他們「dissapear」
我希望這使得一些感覺,不會取消!我的問題是..這是做這件事的好方法嗎?
感謝,
丹
謝謝布倫特。是否有任何聯機代碼示例以上述方式顯示通知的使用? – 2009-02-14 16:30:39