retain-cycle

    1熱度

    1回答

    對不起,但我知道這是一個非常愚蠢的問題,我已經「知道」了答案,但我需要有人向我明確解釋爲什麼答案就是這樣。 最近,我經歷了一些有關各種內存問題的惡夢調試之後,對代碼中的保留週期和內存泄漏有點癡迷/偏執,所以將來我想將它們扼殺在萌芽狀態。但是,在閱讀並學習了許多關於ARC並在Swift中保留循環之後,儘管它很有意義,但我仍然沒有足夠的「直覺」或自然的感覺,以確信我能找到一個,或者缺乏一個,因爲我在編

    0熱度

    1回答

    我一直試圖在MacOS項目中使用Swift插座集合一段時間,並且只是剛剛瞭解到這一點目前不可行。我仍然困惑,爲什麼不呢,但假設這在某些時候被修正了,我還有一個擔憂。 據我所知,網點一般應薄弱,除「根」的出口,以防止保留週期: @IBOutlet weak var someButton: NSButton! 但我已經找到了集合語法的示例不包括弱修改,而我還沒有找到把它(1)是有道理的,和(2)沒

    0熱度

    2回答

    在我的一個類中,我使用了一個委託數組(該類是一個單例)。這導致了一個保留週期。我知道當我只使用一個代表時,我可以避免保留週期。但是這不適用於我的代表陣列。 我該如何避免這個保留週期。 實施例: protocol SomeDelegate: class { func someFunction() } 我類 class SomeClass { // This class is

    0熱度

    2回答

    我有一個類,有正確的模塊: @property(nonatomic, strong) void (^hehe)(); 在init方法中,我做了以下工作: __weak test *weakSelf = self; self.hehe = ^{ test *self = weakSelf; NSLog(@"%zd", self.a); NSLog(@"%zd",

    -1熱度

    1回答

    我想知道是否有一種簡單的方法(或至少是一種方法)來找出程序中保留週期的位置。另外,如果我知道這些保留週期在哪裏存在,取決於它們的類型(例如變量或閉包),我如何使它們變弱。我需要停止與自我(我的GameScene)的所有保留週期,以便它不再需要時釋放並且我想重新啓動它。 任何提示,建議,答案和反饋將不勝感激(並提供具體的代碼和例子將是首選)。謝謝。 編輯: @ Sweeper的回答正是我一直在尋找的

    3熱度

    2回答

    假設之間的週期我有以下代碼: struct X { let propertyOfTypeY: Y } class Y { var propertyOfTypeX: X? } let y = Y() let x = X(propertyOfTypeY: y) y.propertyOfTypeX = x 如果這些都是類的話,那將意味着保留週期。但是,我不清楚類和

    1熱度

    1回答

    我有一個函數接受一個塊作爲參數。我可以使用尾隨閉包來傳入一段代碼,但在保留self時,該閉包必須使用weak參考。 例如,見的MyClass2初始化: class MyClass { func subscribe(using block: @escaping() -> Void) { DispatchQueue.global().async { block()

    0熱度

    1回答

    請考慮下面的代碼: class Module { let viewController = ExampleViewControler() deinit { print("deinit") } } class ExampleViewControler: UIViewController {} @UIApplicationMain class

    0熱度

    1回答

    我從另一家公司接手的項目和分配值時可變我經常看到的這部分代碼: // interface: @property NSArray *foos; // somewhere in implementation: BOOL foosExist = ^BOOL { return self.foos.count > 0; // self inside block }(); 而且通過基

    1熱度

    1回答

    我有一個視圖控制器,我試圖通過傳遞一個函數作爲塊參數來調用Timer.scheduledTimer(withTimeInterval:repeats:block),而不是實時創建塊。我有這個視圖控制器: class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLo