2012-08-13 57 views
-1

我将.xib文件中的UISegmentedControl对象连接到ViewController.h中对应的IBOutle UISegmentedControlivar。然后,我把在ViewController.m这个方法:这是否会导致保留周期?

-(IBAction)switchMapTypes { 
    if (switchMapTypes.selectedSegmentIndex == 0) 
     [worldView setMapType: MKMapTypeStandard]; 

    else if (switchMapTypes.selectedSegmentIndex == 1) 
     [worldView setMapType: MKMapTypeSatellite]; 

    else if (switchMapTypes.selectedSegmentIndex == 2) 
     [worldView setMapType: MKMapTypeHybrid]; 
} 

这将导致保留周期,如果我在.xib文件链接这个方法返回UISegmentedControl对象?或者我完全误解保留周期是什么?

+0

你完全误解了它。有两个主要原因(恕我直言)有循环:你实例化一个像NSTimer,反过来保留你。如果您在准备发布时忘记清除它,那么您将无法发布(保留周期)。同样,如果某个对象将您的类作为委托,但保留了您(某些苹果类会这样做)。第三种不常用的方法是声明一个块并将其作为对象存储,但它保留了“自我”。当然还有其他方法。请注意,使用NIB时,只有“顶级对象”需要“强大”才能“弱”。 – 2012-08-13 01:22:59

回答

1

保留周期发生在对象拥有另一个拥有第一个对象的对象时。您的segemented控件不声明视图控制器的所有权 - 挂接IBAction没有所有权后果 - 所以这里没有循环。

虽然有一个样式问题。你似乎有一种方法,它不是一个与伊娃相同名字的吸气剂,switchMapTypes。你不应该为两个不同的东西使用同一个名字。另外,你的伊娃尔名字应该是一个名词,而方法(这是一个动作)是一个动词。我建议mapTypesSwitch为伊娃和changeMapType的行动。