我正在创建一个应用并开始遇到一个问题,即我的应用的规模变得越来越大,我正在寻找可以减小尺寸的方法。我有50多个xib,所以我认为这是我可以改进的领域之一。我有很多xib都匹配到不同的View Controller eacbh,其中一些非常相似。
我希望能够使用这些类似的ViewControllers,并为所有这些使用一个xib来减小尺寸。
我认为继承将是最好的方法。创建一个" SuperViewController"我所有其他ViewControllers都扩展了。 SuperViewController将连接到xib,然后我可以重用我需要的东西。
这里是我在SuperViewController.m中的内容:
@property (weak, nonatomic) IBOutlet UITableView *tableView;
@property (weak, nonatomic) IBOutlet UIView *emptyView;
@property (weak, nonatomic) IBOutlet UIButton *currentButton;
@property (weak, nonatomic) IBOutlet UIButton *quitWalkButton;
所有这些IBOutlet都在我的xib文件中,并且在我的所有ViewControllers中。每个ViewController只会与那些稍微不同。
问题是,因为它们在我的.m文件中,它们本质上是私有的,我无法从子类访问它们。我可以将它们放在.h文件中并且能够访问它们,但我不希望它们公开我想要它们并且#34;受保护"。另外,我不确定点击等操作是如何工作的,因为它们总是在.m文件中。
我开始认为继承不是在多个View控制器中重用xib文件的方法,但我不确定接受这种方式的方法是什么。无论如何,任何建议都表示赞赏。
答案 0 :(得分:1)
在我看过的应用程序中,空间的大消费者是媒体,而不是XIB数据。大图像,视频,音频等非常快速占用空间。
如果某些内容实际上消耗了XIB中的空间,通过查看文件中的XML而不是查看Xcode的可视化编辑器,可能更容易找到它。您可能会发现大块二进制数据。
答案 1 :(得分:1)
我将这些出口放在它们位于超类的.m文件顶部的位置,并在单独的标头/扩展中为每个出口放置第二个访问器。
//myViewControllerSuperclass+privateOutlets
# import "myViewControllerSuperclass"
@interface myViewControllerSuperclass(privateOutlets)
//this header to be imported to your subclasses
@property (readonly) UITableView *tableView_;
@property (readonly) UIView *emptyView_;
@property (readonly) UIButton *currentButton_;
@property (readonly) UIButton *quitWalkButton_;
//note trailing underscore..
//myViewControllerSuperclass.m
# import "myViewControllerSuperclass+privateOutlets"
@implementation myViewControllerSuperclass
#pragma mark - privateOutlets
-(UITableView *)tableView_{
return self.tableView;
}
-(UIView *)emptyView_{
return self.emptyView;
}
-(UIButton *)currentButton_{
return self.currentButton;
}
-(UIButton *)quitWalkButton_{
return self.quitWalkButton;
}
//these 'getters' just point to the existing outlets..