我正在使用Xamarin iOS。
在ViewDidLoad
我实例化我的UISearchBar
,UISearchDisplayController
,UISearchDisplayDelegate
和UITableViewSource
。因此,我使用UISearchDisplayController
的类变量。因为我只在ViewDidLoad
中使用它,所以我将UISearchDisplayController
的类变量移动到局部变量。
现在奇怪的事情发生了:
现在我恢复了我的更改并再次运行。我检查了我的代码,没有什么不同于此。
但为什么我只能将UISearchDisplayController
用作类变量?
修改
@class变量:
namespace MyApp
{
partial class MyTableListController : UITableViewController
{
// class variable
private UISearchDisplayController searchController;
public MyTableListController (IntPtr handle) : base (handle)
{
// do some init
}
#region View lifecycle
public override void ViewDidLoad (){
// ..
}
}
}
似乎控制器不仅在ViewDidLoad
中使用,因此必须在整个类中可用(例如,类变量)。
答案 0 :(得分:2)
如果您使搜索控制器成为方法变量,则一旦方法完成,垃圾收集器就可以自由地收集它。
只要正在使用搜索控制器,您必须确保保留对搜索控制器的引用。