2010-06-02 2 views
1

Я все еще нахожу свои ноги с объективом-c и задавался вопросом, приемлемо ли использовать @property для двух объектов ниже.@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 release]; locationManager = nil; и то же самое для googleMapView? – fuzzygoat

+0

@fuzzygoat, это нормально для очистки, но как бы вы его установили? – hooleyhoop

+0

Я предполагаю, что вам нужно будет установить их непосредственно (т. Е.) LocationManager = [[CLLocationManager alloc] init]; – fuzzygoat

0

Это кажется совершенно прекрасным со мной.

Единственный случай, когда я могу думать о том, где это было бы неприемлемо, было бы, если бы эти свойства были частными. It is a bit trickier to make properties private, но это важная практика, чтобы скрыть внутренности класса от злоупотреблений!

1

Предполагая, что вы используете @synthesize, то это именно то, что вы должны использовать для этого. Не слишком зацикливаться о «неатомический» и, конечно же, вы можете использовать точечный синтаксис, если вы хотите

self.locationManager = nil; 
+0

Он должен быть self.LocationManager = nil; Вы теряете набор, когда используете. нотация ...;) –

+0

спасибо @Marcus я исправил свой ответ – hooleyhoop

+0

Спасибо, у меня нет ничего против точечной нотации, но когда я начал учиться, я решил придерживаться записи в скобках, пока я больше не понял язык. – fuzzygoat

0

Просто к сведению, но вы также можете использовать IBOutlet ключевое слово в объявлении собственности. Не важно в этом случае, но если вы синтезировали ivars, а не декларировали их явно, вам понадобилось бы ключевое слово для IB, чтобы автоматически видеть выход.

Смежные вопросы