在单例实例的内存透视图中,我们如何删除创建的单例实例,因为它被放入自动释放池中?在Objective-C(IOS)中,有没有人使用单例实例?
回答
请参阅此链接
http://www.johnwordsworth.com/2010/04/iphone-code-snippet-the-singleton-pattern/
苹果这里简要解释它。 Under'Creating一个Singleton实例”主题
谢谢你通过他们 – Allamaprabhu 2012-03-21 10:46:03
有一个关于如何创建一个单身一些争论。我用的是以下模式:
+ (MYSingletonClass *) sharedInstance
{
static dispatch_once_t onceToken;
static MYSingletonClass * __sharedInstance = nil;
dispatch_once(&onceToken, ^{
__sharedInstance = [[self alloc] init];
});
return __sharedInstance;
}
在澄清的OP,事实证明这并没有回答这个问题,但我想我反正分享:)
见this post比较@synchronized v dispatch_once
如果你是投我失望的人,请留下评论,以便我可以改进我的答案。 – 2012-03-21 12:12:06
据我所知,单身人士是有帮助的,因为你做不是直到你的应用程序关闭。所以你的数据总是可用的。
如果你需要释放内存,我建议你找到一个不同的方式MENAGE数据...
Singleton实例不应该被放置在自动释放池。 Singleton实例应该创建一次(通常在第一次引用时)并在应用程序终止时(我的意思是iOS自动)删除。这就是为什么singleton通常被分配给一个静态变量。
分配给该静态变量时,应该增加引用计数器(保留)单例实例。在这一点上,即使你将它添加到自动释放池中,它也不会被删除,因为它已经被保留在别的地方。
要删除该单例实例,您只需要释放分配给静态变量(例如release)的当前对象并指定nil或创建一个新的单例。如果同一个实例已经添加到自动释放池中,它不会立即被删除,只有在自动释放池本身被删除后。但是它在应用程序中不应该有太大的变化,因为单例已经是零或者被重新创建为新的实例,因此任何进一步的调用都将检索新的实例。
同样,我不明白为什么要添加一个单例到autorelease池。如果这不能回答你的问题,请分享一段代码。
static id sharedInstance=nil;
+(id)sharedInstance
{
@synchronized(self)
{
if(!sharedInstance)
{
NSLog(@"Allocated");
sharedInstance = [[self alloc] init];
}
}
return sharedInstance;
}
//standard way to declare singleton object
在iOS 4.0或更高版本中,您应该移至dispatch_once ...它是线程安全的并且更快 – 2012-03-21 12:05:41
也许,如果你需要清除它的内容,您可以添加一个“明确”的方法对你单身的对象......
- 1. 有没有办法在ec2实例中获取实例ID
- 2. 没有收到谷歌实例id为iOS的实例id
- 3. Unity3D iOS插件使用ObjectiveC源来实例化类
- 4. 有没有人有专用Launchpad实例的经验?
- 5. 有没有人有BSP的例子?
- 6. 关机EC2实例没有使用Python
- 7. 没有使用'next'的实例
- 8. chosen.js ::有没有人有一个实际的工作示例?
- 9. AttributeError:菜单实例没有属性'__len__'
- 10. 有没有办法重用Job实例?
- 11. 有没有在iOS上使用UIPopoverController的例子?
- 12. 有没有人有使用swing的Java老虎机的例子?
- 13. 有没有人有使用encodeBytes的示例代码:length:forKey:?
- 14. Flex - 有没有人有使用VideoDisplay控件事件的例子
- 15. 没有人有libxpm的例子吗?
- 16. 有没有人有工作的Django AJAX表单的例子?
- 17. 有没有人有使用SubSonic的简单示例网站的链接?
- 18. WebApplication有2个单例类的实例
- 19. 任何人都没有例外地在iOS 9上工作NSURLConnection?
- 20. 有没有办法从基础实例创建派生实例?
- 21. [Alloy]没有发现实例
- 22. 没有实例的Django Formset
- 23. 视图没有实例化
- 24. StepNode实例没有参数
- 25. 没有实例化BroadcastReceiver
- 26. Haskell没有实例...出现
- 27. Ribbon和Eureka - 没有实例
- 28. Class实例变量没有
- 29. 类没有setter实例'_scheduler'
- 30. Openstack实例没有开始
我不明白你的问题。你是说你想发布一个单身人士,还是你的单身人士被释放? – 2012-03-21 10:43:14
@ashley:是啊ii想要释放单例实例 – Allamaprabhu 2012-03-21 10:45:35
你能向我们解释为什么你想这么做吗?单身人士的重点在于它是一次创建的单个实例。如果你正在发布,然后创建另一个实例,它不是一个单例。 – 2012-03-21 10:48:04