2-5、避免循环引用 不要在头文件之间、不同文件夹或组件之间创建循环依赖。要避免循环依赖关系,可以尝试使用 : 模板; 将公共部分提取到单独的类,然后从中继承; 将代码分离成接口类和实现类。 3、内存管理 3-1、避免动态内存分配和手动管理内存 对于小对象,应该避免动态(堆)内存分配,优先栈上分配。与堆内存分...
循环引用问题的解决方案是使用弱引用。弱引用是一种非拥有关系,其中源对象不保留其引用的对象。 然而,为了保持对象图的完整性,某处必须有强引用(如果只有弱引用,那么页面和段落可能没有任何所有者,因此将被释放)。 因此,Cocoa 建立了一个约定,即“父”对象应该保持对其“子”的强引用,而子对象应该对其父对象有弱...
在内联块中能直接引用 self,但要注意避免导致循环引用,一定要看内联块有没有被某种链路的 self 持有; 避免直接在内联块中直接使用 self,通过 weakself-strongsell; 通过传参的形式在block使用 self; 示例:通知中心持有,导致的循环引用 NSObject* obj = [NSNotificationCenter.defaultCenter addObserverForName:@"" ...
//***__strong修饰符和__weak修饰符类似于C++中的智能指针,std::shared_ptr和weak::shared_ptr,前者也是强引用,后者也是避免循环引用***// 不要显式调用dealloc,如【self dealloc】,下面是可行的 //---ARC下内存管理规则,不能使用或不推荐使用的---// 1.对象变量不能作为C语言的结构体成员, structdat...
(或者答:内存管理的几条原则:自己创建的对象自己持有。非自己创建的对象自己也可以持有。自己持有的对象自己释放。非自己持有的对象无法释放。避免循环引用,retain——release成对出现。在dealloc中最好把指针都置空,避免野指针。) 答:1>.谁申请,谁释放; ...
禁止使用指向 shared_ptr 的裸指针,也就是智能指针的指针,这听起来就很奇怪,但开发中我们还需要注意,使用 shared_ptr 的指针指向一个 shared_ptr 时,引用计数并不会加一,操作 shared_ptr 的指针很容易就发生野指针异常。 shared_ptr<int>sp = make_shared<int>(10); ...
2、在头文件中减少其他头文件的引用 头文件中,过多的 import 会影响编译效率,如果有新的 import 链路,则会导致整个链路上的文件都需要重新编译。 如果可以,在(.h)使用 @class 标记类,在(.m)中 import 文件; 避免“类循环依赖”; 在设计类时,尽量多采用协议,避免 #import 过多,引入不必要的依赖; ...
为避免循环引用导致的内存泄露,就需要使用 weak_ptr。weak_ptr 并不拥有其指向的对象,也就是说,让 weak_ptr 指向 shared_ptr 所指向对象,对象的引用计数并不会增加。 使用weak_ptr 就能解决前面提到的循环引用的问题,随便修改其中一个智能指针为weak_ptr类型即可。 struct Father { shared_ptr<Son> son_; };...
"弱引用"是一种特殊类型的引用,它不会增加被引用对象的引用计数,当被引用的对象被释放时,弱引用会自动变为nil。这种特性使得使用弱引用可以避免循环引用的问题,避免内存泄漏的发生。 在Objective-C中,可以使用__weak修饰符来声明一个弱引用。例如,使用__weak修饰符来声明一个弱引用self的变量: ...
weak_ptr 用来打断 shared_ptr 所管理对象的循环引用问题,若这种环被孤立(没有指向环中的外部共享指针),shared_ptr 引用计数无法抵达 0,内存被泄露;令环中的指针之一为弱指针可以避免该情况; weak_ptr 用来表达临时所有权的概念,当某个对象只有存在时才需要被访问,而且随时可能被他人删除,可以用 weak_ptr 跟踪该...