虽然编码总是有与IBOutlets的保留计数相同的问题:来自NIB的对象解除保存后保留计数?何时使用@ property作为IBOutlet?设置时保留还是分配? Mac和iPhone的区别?保留IBOutlets的计数
所以我从Apple的文档中读取The Nib Object Life Cycle。在Mac和iPhone上的一些测试应用程序给了我一些奇怪的结果。不过,我写下了一些规则如何处理这一问题,以保持快乐而编码,但现在想验证与社区,听取您的意见和经验:
- 始终为顶级对象创建一个IBOutlet。对于非顶级对象(如果需要)(需要访问)。在Mac
- 顶级对象:
- 始终为IBOutlets如下提供一个属性(并释放他们在必要!)
- @属性(非原子,分配)IBOutlet中SomeObject * someObject ;
- @synthesize someObject;
- [self.someObject release];在Mac
- 非顶级对象(没有发布):
- @属性(非原子,分配)IBOutlet中NSWindow *窗口;
- @synthesize someObject;在iPhone上
- 顶级对象(必须保留):
- @属性(非原子,保留)IBOutlet中SomeObject * someObject;
- @synthesize someObject;
- [self.someObject release];在iPhone上
- 非顶级对象(应该保留):
- @属性(非原子,保留)IBOutlet中的UIWindow *窗口;
- @synthesize window;
- [self.window release];
旁注:
- 在Mac和iPhone出口连接与如有二传手做。
- 顶级对象:“have [...]没有所属对象”
- 非顶层对象:‘具有父母或所属对象的任何对象,例如嵌套视图层次结构内的意见’
所以问题是:是这?正确的和好的做法
我希望你可以批准或纠正
这是一个非常明确的答案,我非常感谢你(尽管我没有足够的声望投票)。这应该在Apple的文档中提及!一个问题:不应该有一个NIBs的文件所有者的类不能成为NSWindowController,NSViewController或UIViewController的子类的情况,对吧? – 2010-01-26 17:24:49
文件的所有者可以是NSObject的子类或任何子类,如果你想要的话。这真的取决于你。然而,使用NSWindowController,NSViewController,UIViewController等开发的现代可可开发工具是围绕让这些控制器管理其笔尖的顶级资源来实现的。 – 2010-01-28 01:41:14