为什么UISearchDisplayController必须是类变量?

时间:2014-09-30 10:59:21

标签: c# ios xamarin.ios xamarin uisearchdisplaycontroller

我正在使用Xamarin iOS。

ViewDidLoad我实例化我的UISearchBarUISearchDisplayControllerUISearchDisplayDelegateUITableViewSource。因此,我使用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中使用,因此必须在整个类中可用(例如,类变量)。

1 个答案:

答案 0 :(得分:2)

如果您使搜索控制器成为方法变量,则一旦方法完成,垃圾收集器就可以自由地收集它。

只要正在使用搜索控制器,您必须确保保留对搜索控制器的引用。