2012-05-22 2 views
0

Я использую протокол, и получить утечку, Вот мой код:управления памятью на протоколе

+ (id<GMGridViewLayoutStrategy>)strategyFromType:(GMGridViewLayoutStrategyType)type 
{ 
    id<GMGridViewLayoutStrategy> strategy = nil; 

    switch (type) { 
     case GMGridViewLayoutVertical: 
      strategy = [[GMGridViewLayoutVerticalStrategy alloc] init]; 
      break; 
     case GMGridViewLayoutHorizontal: 
      strategy = [[GMGridViewLayoutHorizontalStrategy alloc] init]; 
      break; 
     case GMGridViewLayoutHorizontalPagedLTR: 
      strategy = [[GMGridViewLayoutHorizontalPagedLTRStrategy alloc] init]; 
      break; 
     case GMGridViewLayoutHorizontalPagedTTB: 
      strategy = [[GMGridViewLayoutHorizontalPagedTTBStrategy alloc] init]; 
      break; 
    } 

    return strategy; 
} 

если я autorelease, то это будет crashed.so, что я должен делать теперь, пожалуйста, помогите мне. .. Спасибо ...

+0

Когда он падает с автоповтором? В этом методе или снаружи? – Francesco

ответ

2

В вашей strategyFromType функции

return [strategy autorelease]; 

При вызове этой функции использовать retain

GMGridViewLayoutStrategy *strat = [[YourClassName strategyFromType:yourType] retain]; 

После использования STRAT переменной

[strat release]; 
+0

так я могу написать autorelease там? – HML

+0

'есть' означает? вы можете либо написать autorelease с оператором return, как я это сделал. Или вы можете использовать '[[[[[[ваш кластер] init] autorelease]' – Krishnabhadra

+0

hi У меня есть пользовательская вкладка. В закладке, когда я возвращаюсь, я звоню одному метод, использующий NSNotificationCenter. В этом методе я просто освобождаю все объекты. Но когда я проверил , в инструменте я обнаружил, что выделенные объекты не будут деляться. Код здесь: '- (void) backBtnPessed { [[NSNotificationCenter defaultCenter] postNotificationName: @ Объект "GeneralViewController": nil]; [self.navigationController popViewControllerAnimated: YES]; } ' , пожалуйста, помогите мне.Спасибо ... – HML

0
-(id<GMGridViewLayoutStrategy>)strategyFromType:(GMGridViewLayoutStrategyType)type 
{id<GMGridViewLayoutStrategy> strategy = nil; 

switch (type) { 
    case GMGridViewLayoutVertical: 
     strategy = [[GMGridViewLayoutVerticalStrategy alloc] init]; 
     break; 
    case GMGridViewLayoutHorizontal: 
     strategy = [[GMGridViewLayoutHorizontalStrategy alloc] init]; 
     break; 
    case GMGridViewLayoutHorizontalPagedLTR: 
     strategy = [[GMGridViewLayoutHorizontalPagedLTRStrategy alloc] init]; 
     break; 
    case GMGridViewLayoutHorizontalPagedTTB: 
     strategy = [[GMGridViewLayoutHorizontalPagedTTBStrategy alloc] init]; 
     break; 
} 

return [strategy autorelease]; 
} 

на вызывающей стороне ..

GMGridViewLayoutStrategy *obj = [[YourClassName strategyFromType:yourType] retain]; 

после использования "Obj" освободить его.

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