Cocoa Tip & Tricks – Memory Management e Notifications

Apple • Cocoa • Development • iOS • iPad • iPhone

Mi piacerebbe fare una sezione sui trucchetti e i migliori modi di scrivere il codice ma so già che non ce la farò.. però.. intanto inizio!

Memory Management

Ogni volta che si alloca un’istanza di un oggetto si deve rilasciare. Sempre. Ad esempio:

UIView* aView = [[UIView alloc] initWithFrame:CGRectZero];
[self.view addSubview:aView];

dopo è necessario rilasciarlo:

[aView release];
aView = nil;

Ma è importante anche assegnare il puntatore a ‘nil‘, altrimenti c’è la probabilità che punti ad una zona errata della memoria causando dei crash.

Notifications

Le notifiche sono davvero una manna e NSNotificationCenter è davvero ottimo, però bisogna ricordarsi di cancellarsi dalle notifiche, altrimenti si rischia di incappare in crash.

Quando ci registriamo quindi ad una notifica, ad esempio:

[[NSNotificationCenter defaultCenter] addObserver:observer selector:@selector(selectorDidHandle:) name:kNotificationKey object:self];

ricordiamoci anche di rimuoverci da tale notifica. In primis, quando non ci serve più, quindi ad esempio all’interno del metodo di handle:

- (void)selectorDidHandle:(NSNotification*)notification
{
   if (notification)
   {
      [[NSNotificationCenter defaultCenter] removeObserver:self name:notification.name object:notification.object];
   }
}

mi raccomando di controllare se ‘notification‘ esiste, perché se fosse ‘nil‘ allora vi rimuovereste da qualsiasi notifica perché inviereste tutti i messaggi ‘nil’ al metodo -removeObserver:name:object: e non è questo che vogliamo.

Come seconda cosa, quando si dealloca l’oggetto che si è registrato ad una qualche notifica, ricordatevi di cancellarvici.

- (void)dealloc
{
   [[NSNotificationCenter defaultCenter] removeObserver:self];

   [super dealloc];
}

Ecco, questi sono i primi tricks che ho voluto condividere con voi.. spero di avere tempo e voglia per dirvene altri..

Buona programmazione!

Scritto il