关于如何构建我的iPhone应用程序,我有一个noob问题。
我有两个主要组件,一个是地图和一个音频播放器,都是自包含的类(MapController和AudioController)。我读了这篇很棒的文章,并试图将它应用到我的应用程序中:
http://blog.shinetech.com/2011/06/14/delegation-notification-and-observation/
我有第三个类WebServices,用于处理将POST数据上传到我的服务器以及对外部API进行查询。
我的问题:
特别是,我对哪种方法更有效地消耗内存感兴趣。或者如果它根本不重要。
谢谢!
答案 0 :(得分:2)
考虑为WebServices类创建单例并使用共享实例。看来这是你需要的设计模式。
关于问题的效率部分,第二种选择更有效,纯粹是因为你没有在RAM中存储尽可能多的数据。然而,假设您的课程内部存储不太多,则可能是不明显的。
@interface WebServices: NSObject
{
}
+ (WebServices*)sharedInstance;
@end
static WebServices *sharedInstance;
@implementation WebSerivces
+ (WebServices*)sharedInstance
{
@synchronized(self)
{
if (!sharedInstance)
sharedInstance = [[WebServices alloc] init];
return sharedInstance;
}
}
@end
答案 1 :(得分:0)
零点
不要求助于单例,而尤其不要处于多线程环境中。如果你需要解释,你可以搜索这个网站(提示:与ObjC类似的OO语言中反对它们的原因非常相似。例如C ++,Java,C#......)。
分享与否?
它最终取决于您的设计需要的行为,但我赞成选项#1作为默认设置。
WebServices
可能很大)。较小的对象可以提供更大的灵活性,并降低程序争夺资源的机会。假设多个实例(1)直到发现问题为止。即使在确定问题后,您通常也可以避免共享。
确定消耗更少内存的内存需要更多信息。如果您考虑共享的对象不是很大(非常不可能),那么它们本身并不是内存消耗的问题。
提出的任何一种方法都可能导致更多的内存消耗 - 它完全取决于上下文和执行。我们需要更多信息来具体回答这个问题。
这并不意味着共享很糟糕,但共享通常会使事情变得复杂,因为您需要设计对象以便在共享时表现出可预测性(特别是因为您在多线程上下文中操作)。
问问自己:
WebServices
会带来哪些重要好处?WebServices
改善您的计划并降低复杂程度? WebServices
地图内容可能与音频内容不相互影响。在这种情况下,WebServices
可能是基类的良好候选者,其中音频和地图服务是单独的子类(假设WebServices
类已经很复杂)。
答案 2 :(得分:0)
我建议使用NSOperationQueue
个NSOperation
,而不是WebServices单例。
请查看此sweet example from Apple,以便他们执行此操作以进行并发图像下载。这是一个Mac示例,但所有显示的类都可以在iOS上找到。他们使用NSInvocationOperation
,但您可以使用NSOperation
子类或NSBlockOperation
来获得更清晰的代码。
您可以通过调用[NSOperationQueue mainQueue];
来获取主队列单例,从任何地方将这些添加到单个队列中。在这种情况下,单身人员的工作只是管理队列(因此不会同时进行太多下载),不进行任何数据处理(这些都由NSOperation
处理)。