我对保留我的属性和内存管理方面感兴趣。这是一个简单的应用程序,用于编辑存储在表中的类的信息。有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