2010-06-02 6 views
1

Je trouve encore mes pieds avec objectif-c et je me demandais s'il était acceptable d'utiliser @property sur les deux objets ci-dessous.@property, ok dans cette situation?

#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 

L'une de mes raisons de leur utilisation est pour que je puisse utiliser les setters dans mon viewDidUnload, il me semble être à l'aide @property beaucoup et je me demandais simplement si l'utilisation dans cette situation est acceptable?

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

beaucoup apprécié

Gary

Répondre

3

Oui. @property est extrêmement commun. Vous ne devriez pas être surpris de l'utiliser beaucoup. Votre viewDidUnload est exactement correct.

+0

Puis-je simplement demander, si ces deux variables n'ont pas été déclarées comme @property, à quoi ressemblerait viewDidUnload? Voulez-vous [locationManager]; locationManager = nil; et la même chose pour googleMapView? – fuzzygoat

+0

@fuzzygoat c'est bien pour le nettoyage, mais comment voulez-vous le régler? – hooleyhoop

+0

Je suppose que vous devez les définir directement (c'est-à-dire) locationManager = [[CLLocationManager alloc] init]; – fuzzygoat

0

Cela me semble tout à fait correct.

Le seul cas auquel je peux penser où il ne serait pas acceptable serait que ces propriétés soient privées. It is a bit trickier to make properties private, mais c'est pratique indispensable pour cacher les internes de la classe contre les abus!

1

En supposant que vous utilisiez aussi @synthesize, alors c'est exactement ce que vous devriez l'utiliser. Ne soyez pas trop accroché sur « nonatomic » et vous pouvez bien sûr utiliser la syntaxe de points si vous aimez

self.locationManager = nil; 
+0

Cela doit être self.LocationManager = nil; Vous perdez l'ensemble lorsque vous utilisez le. notation ..;) –

+0

merci @Marcus j'ai corrigé ma réponse – hooleyhoop

+0

Merci, je n'ai rien contre la notation par points, mais quand j'ai commencé à apprendre j'ai décidé de coller avec la notation de parenthèse jusqu'à ce que je comprenne mieux la langue. – fuzzygoat

0

Juste une note, mais vous pouvez également utiliser le mot-clé IBOutlet dans les déclarations de propriété. Pas important dans ce cas, mais si vous synthétisiez les ivars plutôt que de les déclarer explicitement, vous auriez besoin du mot-clé pour IB pour voir automatiquement le point de vente.

Questions connexes