2010-06-02 73 views
1

我仍然在用objective-c找到自己的脚,并想知道是否可以在下面的两个对象上使用@property。@属性,在这种情况下可以吗?

#import <UIKit/UIKit.h> 
#import <MapKit/MapKit.h> 

@interface MapViewController : UIViewController <MKMapViewDelegate, CLLocationManagerDelegate> { 
    CLLocationManager *locationManager; 
    IBOutlet MKMapView *googleMapView; 
} 
@property(nonatomic, retain) CLLocationManager *locationManager; 
@property(nonatomic, retain) MKMapView *googleMapView; 
@end 

我的一个原因,用起来,这样我可以用我的viewDidUnload的制定者,我似乎可以用@property了很多,只是想知道,如果在这种情况下使用是可以接受的?

-(void)viewDidUnload { 
    [self setLocationManager:nil]; 
    [self setGoogleMapView:nil]; 
    [super viewDidUnload]; 
} 

大加赞赏

加里

回答

3

是。 @property是非常普遍的。你不应该为使用它而感到惊讶。您的viewDidUnload完全正确。

+0

我可以问一下,如果这两个变量未被声明为@property,viewDidUnload将如何显示?你会[locationManager发布]; locationManager = nil;和googleMapView一样? – fuzzygoat 2010-06-02 15:40:34

+0

@fuzzygoat这可以清理,但你会如何设置它? – hooleyhoop 2010-06-02 15:51:30

+0

我想你将不得不直接设置它们(即)locationManager = [[CLLocationManager alloc] init]; – fuzzygoat 2010-06-02 15:58:32

0

对我来说这似乎完全没问题。

我能想到的唯一情况是不可接受的,如果这些属性必须是私人的。 It is a bit trickier to make properties private,但这是隐藏课堂内部不受虐待的基本做法!

1

假设你也使用@synthesize,那么这正是你应该使用它的地方。不要太挂了有关“非原子”,当然,如果你喜欢

self.locationManager = nil; 
+0

它应该是self.LocationManager = nil;您在使用时会丢失集合。 notation ..;) – 2010-06-02 15:36:51

+0

谢谢@Marcus我纠正了我的答案 – hooleyhoop 2010-06-02 15:39:16

+0

谢谢,我没有任何反对点符号的内容,但是当我开始学习时,我决定坚持使用括号表示法,直到我更全面地理解语言。 – fuzzygoat 2010-06-02 15:43:15

0

只是注意,你可以使用点语法,但你也可以使用关键字IBOutlet财产申报。在这种情况下并不重要,但如果您在合成ivars而不是明确声明它们,则需要IB的关键字自动查看插座。

相关问题