我在AppDelegate中添加了一些属性来充当全局变量的角色,在部分类中使用了一个指向AppDelegate的实例变量,以方便的使用这些属性,我的同事更我说这么做会导致类似于循环保留的情况,导致这个类没有办法析构,我自己是觉得这么做在内存管理上是没啥问题,只是这货说的好像真的一样,强行装后面有人,导致我瞬间就虚了,请各位不灵赐教
最简单的证明办法,就是在你的类里重载dealloc,然后如果能调用到那就是正常释放了
针对你说的情况,确实有可能造成循环引用。因为你并没有把类之间的引用勤快描述的太清楚(比如谁持有谁,是strong还是weak),所以无从判断,你先想明白下,为什么delegate要声明成weak,而其他大部分property都是strong。你的情况到底属于哪种。
6楼 @k19870203 你还是没有描述清楚你的引用情况,你的AppDelegate里既然已经有全局变量了,那这些全局变量只要持有AppDelegate的strong property那就是循环引用,或许你没有直接持有,但是如果这些变量持有的strong property又持有AppDelegate,同样构成循环引用,甚至你在你的viewcontroller理持有AppDelegate,也可能构成循环引用
但是你这个情况比较特殊,因为AppDelegate是全局实例,所以本来就不存在释放的问题,即便循环引用了,也没有什么危害,毕竟程序退出的时候总是会清理所有内存的。不过从最佳实践的角度出发,总是不应该持有AppDelegate的strong property的,要么持有weak引用,用么使用系统提供的[[UIApplication sharedApplication] delegate]这种形式