无法解码弱变量

时间:2018-04-13 10:27:19

标签: ios swift4 codable

class User: Codable {

//MARK:- Properties
var firstName: String?
var lastName: String?
weak var friend: User?

enum CodingKeys: String, CodingKey {
    case firstName = "first"
    case lastName = "last"
    case friend
}

}

User类有一个friend属性,它同样属于User类型。所以为了避免任何保留周期,我把它作为弱变量。但是当JSONDecoder解码json时,用户实例的friend属性总是为nil。如果我错误地把这位朋友视为弱势?如果它是正确的,那么该值将如何插入User的friend属性中。

另请阅读此weak variable is intermediately nil。如果我不使用弱势,会有任何保留周期吗?

1 个答案:

答案 0 :(得分:1)

你的朋友变量在这个上下文中必须是强大的,如果没有,那么一旦你的编码器方法的init结束,你将被实例化和解除分配,由此#include<stdio.h> #include<stdlib.h> int main(){ char* a = malloc(size+1); // where size is max string length int i; printf("\n enter value "); for (i=0;i<5;i++){ printf("%d Name :\n",i); scanf("%c",&a[i]); printf("%c\n",a[i]); } printf("%c\n",a[2]); printf("%c\n",a[3]); free(a); } 改变weak var friend: User?

关于保留周期,只有var friend: User?self.friend.friend = self

才能获得保留周期

您始终可以检查是否正在实施self.friend = self方法取消分配对象

<强>实施例

<强>情形1

deinit

<强>结果

  

user1 deallocated

<强>情形2

class ViewController: UIViewController {
    var user1 : User?
    var user2 : User?
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        user1 = User()

        user2 = User()
        user1?.friend = user2

        user1 = nil
    }

<强>结果

  

user1未取消分配 - &gt;保留周期问题