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。如果我不使用弱势,会有任何保留周期吗?
答案 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;保留周期问题