Cocoa 独立重用已声明的强属性

Cocoa 独立重用已声明的强属性,cocoa,attributes,properties,instance,automatic-ref-counting,Cocoa,Attributes,Properties,Instance,Automatic Ref Counting,我创建了一个类(MyClass),需要几个实例,每个实例将包含几个计时器、文本字段和标签。由于ARC,当计时器失效时,目标正在被解除分配,但我有时会使它们失效以重新启动它们,所以我不能让它们解除分配。因此,我转到我的AppDelegate(它是创建MyClass实例的类),并将MyClass声明为强属性@property(strong)MyClass*myInstance这部分起作用。问题是,每当我创建另一个实例时,前一个实例就会丢失它的引用,如果我试图在旧实例中重新启动NSTimer,则会获得

我创建了一个类(MyClass),需要几个实例,每个实例将包含几个计时器、文本字段和标签。由于ARC,当计时器失效时,目标正在被解除分配,但我有时会使它们失效以重新启动它们,所以我不能让它们解除分配。因此,我转到我的AppDelegate(它是创建MyClass实例的类),并将MyClass声明为强属性<代码>@property(strong)MyClass*myInstance这部分起作用。问题是,每当我创建另一个实例时,前一个实例就会丢失它的引用,如果我试图在旧实例中重新启动NSTimer,则会获得错误的访问权限。如果我重新启动最后一个计时器,就没有问题了


我相信,由于myInstance是一个属性,每当我创建一个新实例时,AppDelegate都会重写旧实例,从而丢失旧引用。我需要能够保持强属性,但以某种方式使其对每个实例独立工作,或者找到另一种方法使myInstance成为强引用,不必将其作为属性。

将实例放在NSSet或NSArray之类的容器中。

将实例放在NSSet或NSArray之类的容器中。

无论如何,这种设计都非常脆弱。NSTimer并不意味着无效和重新启动。您应该让回调函数在需要“暂停”时忽略刻度,或者只是创建新的刻度。@Chuck,忽略刻度是什么意思?怎么做呢?@Elbimio:与其让计时器失效,不如让它启动。当它暂停时,检查你是否暂停,如果你没有暂停,只做那些应该是周期性的事情。无论如何,这种设计是非常脆弱的。NSTimer并不意味着无效和重新启动。您应该让回调函数在需要“暂停”时忽略刻度,或者只是创建新的刻度。@Chuck,忽略刻度是什么意思?怎么做呢?@Elbimio:与其让计时器失效,不如让它启动。当它发生时,检查你是否暂停,如果你没有暂停,只做应该是周期性的事情。