我刚刚安装了新版本的Xcode/ios6.viewDidUnload现在已折旧.
在苹果文档中,
viewDidUnload [...]在iOS 6.0中已弃用.在低内存条件下不再清除视图,因此永远不会调用此方法.
但是大量的应用程序正在使用此回调来释放其属性,例如:
- (void)viewDidUnload {
[super viewDidUnload];
self.recipientButton = nil;
self.connectButton = nil;
self.infoLabel = nil;
}
Run Code Online (Sandbox Code Playgroud)
这是发布IBOutlets的最佳做法.
那么,第一个问题:
iOS 6中这些现有应用程序会发生什么?他们会泄漏吗?
第二个:
发布IBOutlet属性的新推荐方法是什么?在dealloc方法?
我是新开发者,即将推出我的第一款应用.我对viewDidUnloadApple的iOS 6发行说明中所述的弃用感到困惑:
在iOS 6中,现在不推荐使用UIViewController的viewWillUnload和viewDidUnload方法.如果您使用这些方法来释放数据,请改用didReceiveMemoryWarning方法.如果未使用此方法,也可以使用此方法释放对视图控制器视图的引用.在执行此操作之前,您需要测试视图不在窗口中.
为什么会这样?我应遵循哪些指导原则来确保此更改不会在我的应用中导致任何性能问题?
谢谢.
cocoa-touch objective-c didreceivememorywarning viewdidunload ios6
我已经阅读了很多关于正确的地方调用.removeObserver for NSNotificationCenter的建议,因为viewDidUnload不是一个选项.
我只是想知道Swift中的新deinit()是否是一个不错的选择?
-缺口
在新的iOS 6中,viewDidUnload不推荐使用,我们已被指示使用它didReceiveMemoryWarning来管理UIViewController实例和子类中的对象.将nils分配给内部的UIView didReceiveMemoryWarning类似于内部的方式同样有效viewDidUnload吗?
我问这个是因为这两种方法似乎有所不同.似乎didReceiveMemoryWarning不能保证viewDidLoad再次调用以重新实例化任何必要的UIViews.
我怀疑在iOS 6中,内存管理完成后无需手动解除分配UIView.请帮助我了解在理解UIViewController的生命周期时我错过了什么.
uiviewcontroller didreceivememorywarning ios viewdidunload ios6
我正在使用iPhone项目ARC.该应用程序是基于导航的应用程序UINavigationController.
典型的用例是多次从"主" UIViewController转到"次" UIViewController,可能多达100次.辅助控制器有许多静态的本地PNG图像,其中一些是重复的.
我正在分析应用程序,我可以看到,当从"主"控制器转到"辅助"控制器时,它分配大约0.8 MB,但是,当按下后退按钮时,它不会释放内存.所以,当我再次进入辅助控制器时,会分配其他0.8 MB,依此类推......
调试时,我注意到viewDidUnload:辅助UIViewController方法永远不会被调用,但我也读到了这个方法,我应该设置为nil控制器保存的引用.这样做viewDidDisappear:没有用,因为我希望只有在按下后退按钮时才会发生这种情况,也就是说,当从堆栈弹出控制器时(viewDidDisappear:在按下堆栈上的另一个控制器时也会调用该方法).
所以问题是:我有什么必须这样做的吗?我可以强制调用该方法吗?这种行为是否正常(分析,在"主要" - >"次要" - >"主要" - >"次要" - > ......的某些周期后,分配达到20MB?
谢谢大家
memory iphone allocation automatic-ref-counting viewdidunload
这个问题从未发生在我身上.我在UINavigationController中有一个UIViewController.当收到内存警告(没关注级别)时,会调用可见控制器的viewDidUnload方法,因此卸载视图,我得到一个很棒的黑屏(顶部有一个导航栏).
我在iOS 4.3.3上使用iPad 1进行测试.
有什么建议?
这是viewDidLoad在iOS 4.x或更低版本中发布保留的视图的正确(最佳?)方式吗?还有什么需要考虑的吗?
- (void) viewDidUnload
{
[super viewDidUnload];
[self releaseViews];
}
- (void) dealloc {
[self releaseViews];
[super dealloc];
}
#define SAFE_RELEASE(a) [a release]; a = nil;
- (void) releaseViews {
SAFE_RELEASE(myView1);
SAFE_RELEASE(myView2);
SAFE_RELEASE(myView3);
}
Run Code Online (Sandbox Code Playgroud) 我已经看到一些苹果公司的例子可以打电话,[super viewDidUnload];而另一些则没有.我读了一篇文章(几个月前,所以我不记得那个网址),说这[super viewDidUnload];是不必要的,但除此之外没有解释.
有没有明确的理由为什么或为什么不告诉超级的viewDidUnload?
并且,(如果应该这样做)在将所有属性设置为nil,之后或之前是否重要之前,我是否应该调用super ?
- (void)viewDidUnload {
// Is this necessary?
// [super viewDidUnload];
self.tableDataSource = nil;
self.titleLabel = nil;
// Is it better to call super before or after nil'ing properties?
// [super viewDidUnload];
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
添加和删除观察者的最佳做法是NSNotificationCenter什么?
我想知道如果加入self作为观察员viewDidLoad和删除self的viewDidUnload就足够了.也许我应该删除self的dealloc为好.
也许需要考虑低内存条件.我可以看到添加viewDidLoad和删除dealloc有问题:viewDidUnload由于内存不足而被调用...然后viewDidLoad在再次显示视图时被调用...现在self已被添加为观察者两次没有删除(因为dealloc不是所谓的).
注意:我正在考虑一个self引用UIViewController子类的基本示例.
有一种UIViewController方法-(void)viewDidUnload.我尝试放入NSLog("unloaded");那里以查看视图何时被卸载,但没有任何内容打印到控制台.
我在哪里放置代码,以便在视图卸载之前我可以执行操作?
viewdidunload ×10
ios ×5
ios6 ×3
objective-c ×3
cocoa-touch ×2
dealloc ×2
iphone ×2
memory ×2
allocation ×1
deprecated ×1
release ×1
super ×1
swift ×1
viewdidload ×1