Objective c 即使在不需要时使用弱变量的缺点?

Objective c 即使在不需要时使用弱变量的缺点?,objective-c,swift,automatic-ref-counting,Objective C,Swift,Automatic Ref Counting,自动引用计数(ARC)似乎给开发人员带来了很大的负担来跟踪引用。为什么不能让每个变量都变弱,而不必担心强保留循环的发生?只要至少有一个对该对象实例的强引用,ARC对象实例就处于活动状态 若您将所有变量都标记为弱变量,那个么就不会有对对象实例的强引用,也并没有任何东西可以使它保持活动状态。它将在被创造后立即被摧毁 若要对对象实例进行多个引用,则必须考虑是否应将其标记为弱引用或强引用(取决于特定代码),这是无法避免的 只要至少有一个对该对象实例的强引用,ARC下的对象实例就处于活动状态 若您将所有变

自动引用计数(ARC)似乎给开发人员带来了很大的负担来跟踪引用。为什么不能让每个变量都变弱,而不必担心强保留循环的发生?

只要至少有一个对该对象实例的强引用,ARC对象实例就处于活动状态

若您将所有变量都标记为弱变量,那个么就不会有对对象实例的强引用,也并没有任何东西可以使它保持活动状态。它将在被创造后立即被摧毁


若要对对象实例进行多个引用,则必须考虑是否应将其标记为弱引用或强引用(取决于特定代码),这是无法避免的

只要至少有一个对该对象实例的强引用,ARC下的对象实例就处于活动状态

若您将所有变量都标记为弱变量,那个么就不会有对对象实例的强引用,也并没有任何东西可以使它保持活动状态。它将在被创造后立即被摧毁


若要对对象实例进行多个引用,则必须考虑是否应将其标记为弱引用或强引用(取决于特定代码),这是无法避免的

这是因为只要需要对对象的引用,只要需要引用的对象在内存中存活,就需要一个强引用

(你可以回到Objective-C,在那里你可以不用ARC完成所有的工作,自己手动管理内存。显然这会让你喜欢ARC。)

另一方面,你可以问同样的问题,以获得有力的证明。不同之处在于,当你只保留强引用(没有弱引用)时,你就不必考虑弱引用或强引用,这样就行了。(光靠弱者很可能不起作用) 但是,您必须100%确保对每个不再需要的对象的每个强引用都为null

旁注:
将对象添加到集合(如数组或集合,或作为视图的子视图)时,这些集合对象将为您保留强引用。在这种情况下,您不必在意,只要在可以丢弃对象时从该集合中移除该对象即可。此“技巧”仅适用于维护这些集合的情况—例如,当它涉及到视图层次结构中的视图时,只要它们是必需的

这是因为只要需要对对象的引用,只要需要引用的对象在内存中存活,就需要一个强引用

(你可以回到Objective-C,在那里你可以不用ARC完成所有的工作,自己手动管理内存。显然这会让你喜欢ARC。)

另一方面,你可以问同样的问题,以获得有力的证明。不同之处在于,当你只保留强引用(没有弱引用)时,你就不必考虑弱引用或强引用,这样就行了。(光靠弱者很可能不起作用) 但是,您必须100%确保对每个不再需要的对象的每个强引用都为null

旁注:
将对象添加到集合(如数组或集合,或作为视图的子视图)时,这些集合对象将为您保留强引用。在这种情况下,您不必在意,只要在可以丢弃对象时从该集合中移除该对象即可。此“技巧”仅适用于维护这些集合的情况—例如,当它涉及到视图层次结构中的视图时,只要它们是必需的

恐怕你就是不懂ARC。ARC为您计算引用数,具体取决于某个对象是强还是弱(实际上,强增加引用数,而弱不增加引用数)。如果引用计数变为0,则会将其从内存中删除。所以,如果所有内容都很弱,那么属性将立即从内存中删除,并且您无法使用它们。实际上,你需要一个强有力的方法


作为计划如何构造强/弱定义的一种简单方法,请将一个特定类视为属性的所有者,并将其命名为强。这意味着该财产将保留下来供该所有者使用。如果另一个类也有一个对该属性的引用,但不要求该属性始终为其保留,则将其设置为弱。只要主所有者类(比如视图控制器)仍然存在,那么属性也会存在。如果这两个属性都设置为弱,那么即使该属性仍然显示,它也将为空,因为在运行时,确定没有人真正需要它,因此它已被删除。

恐怕您就是不理解ARC。ARC为您计算引用数,具体取决于某个对象是强还是弱(实际上,强增加引用数,而弱不增加引用数)。如果引用计数变为0,则会将其从内存中删除。所以,如果所有内容都很弱,那么属性将立即从内存中删除,并且您无法使用它们。实际上,你需要一个强有力的方法


作为计划如何构造强/弱定义的一种简单方法,请将一个特定类视为属性的所有者,并将其命名为强。这意味着该财产将保留下来供该所有者使用。如果另一个类也有一个对该属性的引用,但不要求该属性始终为其保留,则将其设置为弱。只要主所有者类(比如视图控制器)仍然存在,那么属性也会存在。如果这两个属性都设置为弱,那么即使该属性仍然显示,它也将为空,因为在运行时,确定没有人真正需要它,并将其删除。

这可能会让您感到惊讶,但ARC使这更容易,而不是更难!:)关闭ARC,看看是否可以学习内存管理。你可能想读书