iOS - 类别实现文件中的插座

时间:2012-03-16 02:15:45

标签: objective-c ios cocoa iboutlet objective-c-category

概述

  • 我有一个iOS项目,其中视图控制器实现已经变得很大,并认为最好根据功能分为类别
  • 视图控制器实现文件中的出口在类别的实现文件中不可用。

注意 - 我正在使用ARC(自动引用计数)

问题

  1. 我在视图控制器的实现文件中创建了一个文本域的插座。现在我可以在视图控制器类别的实现文件中为相同文本字段创建另一个插座吗?
  2. 是否会导致任何内存未被释放或出现任何其他内存问题(这两个出口都将是weaknon atomic)?
  3. 从设计的角度来看,这是否可以接受,或者有更好的方法吗?
  4. 可以在视图控制器的实现中访问类别的方法吗?我可以包含头文件,但我想知道在运行时是否会有任何不可预测的行为

2 个答案:

答案 0 :(得分:1)

  1. 您可以拥有任意数量的插座,它们是指针,允许您通过它们修改对象。

  2. 如果您正在使用arc并假设您使用Interface Builder来创建文本字段,那么不,因为您将它们设置为弱,这只意味着这些指针不会计入对象的保留计数,所以只要至少有一个强指针指向它,对象就会保持活动状态。在这种情况下,接口构建器的视图保留它,当该视图被释放时,该对象将是。非原子意味着它不是安全的,但这对你的目的无关紧要。

  3. 这实际上取决于你的程序,因为我不能用你的描述来描述它我只能建议在iOS上开发时坚持使用MVC模型。 https://developer.apple.com/library/ios/#documentation/General/Conceptual/CocoaEncyclopedia/Model-View-Controller/Model-View-Controller.html

答案 1 :(得分:1)

如果您需要在视图控制器类的类别中访问声明的IBOutlet属性,为什么不在类头文件中声明它们以便它们可用于您的类别?现在,在实现文件中声明属性和ivars的能力意味着隐藏实现的混乱细节,但不会冒使您的代码无法管理的风险。你的功能设计似乎很明智。