2012-05-13 8 views
0

У меня есть эта свойство mySegmented, заявил, как этотiphone - Сообщение отправлено высвобождены, например, в блоке

.h 
@property (retain) UISegmentedControl *mySegmented; 


.m 
@synthesize mySegmented = _mySegmented; 

тогда, она была создана, как это:

self.mySegmented = [self createSegmented]; 
// createSegmented creates an autoreleased segmented control 

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

[UIView animateWithDuration:0.8 

      animations:^{ 

       NSArray *list = [NSArray arrayWithObjects: 
            self.mySegmented1, 
            self.mySegmented2, 
            self.mySegmented3, 
            nil]; 

       for (UISegmentedControl *oneSeg in list) { 
        [oneSeg setAlpha:0.0f]; 
       } 

      }]; 

Что происходит: через некоторое время приложение вылетает при попытке построить этот массив. Я полагаю, что один из сегментированных элементов управления каким-то образом освобождается. Нет освобождения, которое я могу видеть в коде.

Мой вопрос: этот создаваемый массив автореализован. Что происходит, когда блок заканчивает анимацию? это релиз, отправленный каждому члену массива?

Если я сохраню сегментированный элемент управления после его создания, Xcode жалуется, что он просочится.

любые подсказки?

спасибо.

ответ

2

Пожалуйста, сохраните, как вы пробовали, но обязательно отпустите их в методе dealloc, Xcode не должен жаловаться таким образом.

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

Сообщите мне, как это.

+0

в моем dealloc У меня есть [_mySegmented1 release]; [_mySegmented2 release]; [_mySegmented3 release]; Как я могу его отпустить? [выпуск self.mySegmented1]; ?????????????? – SpaceDog

+0

Привет, да, это хорошо выглядит при условии, что вы @synthesize mySegmented1 = _mySegmented1; 'в своей реализации. Это освободит эти объекты, когда контроллер View будет выпущен, теперь, когда вы получите свой объект, который хотите сделать 'self.mySegmented1 = [[self createSegmented] сохранить];' – Daniel

+0

thank !!!!!!!!!!!! – SpaceDog