2012-06-04 4 views
0

Я новичок в разработке iPhone.Как выпустить его?

+ (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; 
} 

Здесь я называю этот метод:

gmGridView = [[GMGridView alloc] init]; 
gmGridView.layoutStrategy = [GMGridViewLayoutStrategyFactory strategyFromType:GMGridViewLayoutHorizontalPagedLTR]; 
[self.view addSubview:gmGridView]; 

Теперь мой вопрос заключается в том, что, как освободить объект стратегии метода strategyFromType Его дает мне потенциал leak.and, если я собираюсь выпустить/autorelease , мое приложение рушится. Пожалуйста, помогите meThanking вас ...

+0

оффтоп: вы можете просто сократить [[YourClass Alloc] инициализации] на [YouClass новый] – CarlJ

ответ

4
return [strategy autorelease]; 

UPDATE:
Ответ о возвращении в autoreleased объект является правильным, проблема заключается в том, что GMGridView использует ARC согласно описанию в project's site.

Требования:

IOS 4 и выше
Xcode 4.2 (GMGridView использует ARC)
рамочные: Foundation, UIKit, CoreGraphics и QuartzCore

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

+0

всякий раз, когда я выпустил/autorelease, что OBJ, приложение сбой. – HML

+1

убедитесь, что свойство layoutProperty объявлено с сохранением: @property (сохранить, неатомный) id layoutStrategy; –

+0

oh позвольте мне проверить .... – HML

0

По возвращении объекта вам необходимо автообновить объект

return [strategy autorelease]; 
1

Если вы используете ARC, то вы код отлично, но без ARC вы должны вернуть autoreleased объект:

+ (id)strategyFromType:(GMGridViewLayoutStrategyType)type { 
    id 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]; 
} 

Все объекты, которые возвращенны методами должны быть autorelease, за исключением, если alloc, new и любые методы copy.

Я бы действительно предложил прочитать Advanced Memory Management Programming Guide.

0

возвращение [стратегия autorelease]; также [gmGridView release];

в конце функции

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