1. 程式人生 > >swift中解決迴圈引用的方法

swift中解決迴圈引用的方法

// 方法1: OC 的方法

// weakSelf -> ViewController? 

// self - ViewController

// 'weak' must be a mutable variable, because it may change at runtime

// weak 的變數在執行時有可能被設定為 nilweak不能使用 let

//        weak var weakSelf = self

//        loadData { (result) -> () in

//            print(result)

//            print(weakSelf)

//        }

// 方法2: Swift 的方法首選

// [weak self] 表示閉包中的 self 都是弱引用的,不需要再使用其他的變數

// weak 的變數在執行時有可能被設定為 nil,所以閉包中的 self,都是可選的

loadData { [weak self] (result) -> () in

// unexpectedly found nil while unwrapping an Optional value

// ! 強行解包,值不存在丟擲異常

// ? 可選解包,值不存在,給nil傳送訊息

print(self?.view)

        }

// 方法3: [unowned self]

// [unowned self] OC 中的 assign 是一樣的,物件釋放之後,指標保持不變

// 1> 閉包中不需要考慮解包的問題

// 2> 但是如果 self 釋放,會出現野指標訪問

//        loadData { [unowned self] (result) -> () in

//            // EXC_BREAKPOINT 野指標訪問

//            print(self.view)

//        }


相關推薦

swift解決迴圈引用方法

// 方法1: OC 的方法 // weakSelf -> ViewController?  // self - ViewController // 'weak' must be a mutable variable, because it may change a

Swift學習記錄 -- 14.閉包的使用和解決迴圈引用方法

Swift中的閉包 , 幾乎和OC中的block一模一樣 , 我個人又比較偏好block , 所以覺得閉包還是蠻不錯的 . 在迴圈引用問題上 , 解決方案也更加簡潔 // HttpTool類

如何在 iOS 解決迴圈引用的問題

稍有常識的人都知道在 iOS 開發時,我們經常會遇到迴圈引用的問題,比如兩個強指標相互引用,但是這種簡單的情況作為稍有經驗的開發者都會輕鬆地查找出來。 但是遇到下面這樣的情況,如果只看其實現程式碼,也很難僅僅憑藉肉眼上的觀察以及簡單的推理就能分析出其中存在的迴圈引用問題,更

ios-Swift解除迴圈引用的三種方式

1、加一個標記,表示裡面用到的self都是弱引用 test4 {[weak self] (name)->() in //self?表示如果物件一旦被

swift解決閉包迴圈引用的幾種方式

import UIKit class ViewController: UIViewController { // VC --strong -- 閉包 // 閉包- strong -- VC

swift 閉包迴圈引用解決辦法

模擬網路請求,封裝工具類,使用閉包變數對閉包進行強引用 // // NetworkRequestTool.swift // Test // // Created by fe on 2017/2/28. // Copyright © 2017年 fe. All ri

Swift按鈕監聽方法私有化之後崩潰解決方式

navigationItem.rightBarButtonItem = UIBarButtonItem(title: "註冊", style: UIBarButtonItemStyle.Plain, target: self, action: "loginBtn") /

小胖說swift07-------- swift協議代理的使用以及解決迴圈引用問題

這兩天看了一下Swift的協議代理, 大體思路和OC沒什麼區別, 但是按照官方的書本寫出的協議代理, 發現會有記憶體洩露問題, 找了半天沒有發現問題, 突然想起看系統類的協議代理的寫法, 瞬間發現了

淺談OC迴圈引用問題

將近一個月沒有寫文章了,藉口就不一一羅列了。。。。 廢話不多說,進入正題。 談到迴圈引用這個問題,相信很多iOS的童鞋至少都在運用block技術的時候遇到過,同樣的,很多童鞋肯定也是通過weak這個關鍵字來處理的,但是我相信,這其中肯定有不少童鞋並沒有搞明白為什麼會發生迴圈引用。本篇短文章,就以自己的理解

pythonfor迴圈常用方法

#【1】遍歷列表 languages=["c","c++","python","shell"] for x in languages:     print(x) #【2】使用內建range()函式遍歷數字序列 for j in range(5):  

vue 解決迴圈引用元件報錯的問題

問題由來 最近在做專案的時候遇到使用迴圈元件,因為模式一樣,只有資料不一樣。按照普通元件呼叫格式來做的時候總是報錯,錯誤資訊為[Vue warn]: Unknown custom element: <selfile> - did you register

block解決迴圈引用(二)

接著上一遍,這裡首先講一下 block的反向傳值 ViewController和ViewController1 //ViewController1裡面 typedef void(^MyBl

android開發過程解決bug的方法

1、判斷手機型號 2、判斷手機版本號 1、解決魅藍3手機軟鍵盤不能頂上去佈局的問題 if (Build.MODEL.equals(“m3”)){ Log.i(“LHD”,”connect魅族3手機”);

block解決迴圈引用(一)

看了網上的一些資料,感覺暈乎乎的,還不是很明白。自己抽了一個下午仔細的研究了一下block,嗯,明白了好多。分兩次寫出來,歡迎大家交流。 這裡不討論底層,不討論原理,注重實用! 什麼是block? 閉包(block):閉包就是獲取其他函

javascript迴圈引用物件處理

先說明一下什麼是迴圈引用物件: var a={"name":"zzz"}; var b={"name":"vvv"}; a.child=b; b.parent=a; 複製程式碼 這裡的a和b都是一個迴圈引用物件。迴圈引用物件本來沒有什麼問題,序列化的時候才會發生問題,比如呼叫JSON.stringif

GC可達性分析回收演算法 解決迴圈引用問題 強引用引用

JVM有一個回收演算法是引用計數演算法,每當物件被引用一次,就+1,釋放一個引用就-1,當垃圾回收時,引用計數為0的物件就會被GC掉。但這個方法有個問題,就是無法解決迴圈引用的問題。 迴圈引用就是物件A引用了物件B,物件B引用了物件A,構成了一個引用環。彼此都沒發揮什麼作用

WPF資源的引用方法

這裡主要是以圖片的引用為例。 一、引用同一個程式中的資源 1、使用相對Uri來引用資源,如下所示 img.Source=new BitmapImage(new Uri(@"d"\iamges\Background\1.jpg")); 使用相對uri: img.Source=new BitmapImage(n

iOS開發之swift與OC混編出現的坑,oc不能對swift的代理進行呼叫,不能訪問swift的代理,swift的回撥方法

1. swift與oc混編譯具體怎麼實現,這兒我就不重複講出了,網上有大把的人講解。 2. 在swift與OC混編的編譯環境下, oc類不能訪問swift建立類中的代理? 解決方法如下: 在代理的頭部加上 @objc(代理名字),這樣就在外部就可以訪問了,如下圖。 然

淺談iOS迴圈引用問題

關於iOS中迴圈引用的場景: 1、代理 delegate      這個一般是不會出錯的,ARC建立代理的時候我們用的是weak,MRC下我們用的assign。基本就避免了這個問題。 2、block

vue-cli解決css引用圖片打包後找不到檔案資源的問題

1.在CSS中引入圖片   #slider1 { background-image: url(./bg02.jpg); background-size: cover; } 注意:此處的圖片與索引檔案在同一個目錄下; 在開發環境下背景圖片是可以好好的顯示的,但是