2016-11-05 82 views
1

我搜索了一個與viewDidLoad()非常相似的函數(包含在iOS中或包含外部庫)。區別應該是,搜索功能將僅在應用程序第一次啓動時使用,這意味着當用戶打開應用程序時。每次加載視圖時都會使用ViewDidLoad()。但是搜索函數xy()只會在運行時第一次加載視圖時使用。iOS功能類似ti viewDidLoad()

這是正常的版本

用戶打開應用程序,瀏覽1打開 - > viewDidLoad中()的圖1 - >用戶打開 視圖2 .... - >用戶返回到搜索1 - > viewDidLoad中(查看)的1

我搜索這個

用戶運ened App,View 1打開 - >視圖1的ViewDidLoad()和函數 xy() - >用戶打開視圖2 .... - >用戶返回視圖1 - > 視圖1的ViewDidLoad()不是函數xy(),因爲視圖 已在此運行時加載)

感謝您的幫助!

+0

的AppDelegate中是不適合你的情況? –

+1

視圖[控制器]的'viewDidLoad'實際上在普通的視圖控制器層次結構中實際上不會被多次調用。 – tktsubota

+0

此行爲是可靠的,特別是對於不是窗口的根視圖控制器的所有視圖控制器。 – clemens

回答

1

您可以將代碼,你需要在dispatch_once塊一次運行OBJ-C和使用static var迅速

的OBJ-C:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     // code you place here will run once 
    }); 
} 

斯威夫特3

static var didInit = false 

override func viewDidLoad() 
{ 
    super.viewDidLoad() 

    if MyClass.didInit == false { 
     MyClass.didInit = true 
     // code you place here will run once 
    } 
} 
2

你嘗試

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool