приложение для iPhone с несколькими представлениями/подпредставлениями: память не освобождается

Да, каждая функция должна иметь прототип, но тот прототип может появиться или в отдельном объявлении или как часть определения функции. Функциональные определения, записанные в C89 и естественно, имеют прототипы, но если Вы пишете вещи в классическом K& R стиль, таким образом:

main (argc, argv)

  int argc;
  char **argv;

{
  ...
}

тогда функциональное определение не имеет никакого прототипа. Если Вы пишете ANSI C (C89) стиль, таким образом:

main (int argc, char **argv) { ... }

тогда функциональное определение имеет прототип.

5
задан mga 27 September 2009 в 15:19
поделиться

2 ответа

После миллиона различных попыток я наконец наткнулся на этот форум .

В нем говорится:

Очевидно, изображения, назначенные в IB, загружаются в представления изображений с использованием imageName . imageNamed кэширует изображения таким образом, чтобы их можно было выгружать. Вы можете загрузить изображения в viewDidLoad с помощью initWithContentsOfFile , а затем назначить их представлениям.

Где-то еще я читал, что imageNamed - это дьявол ], поэтому я бы предпочел, чтобы мои изображения не загружались таким образом.

(Кстати, я использую iPhone OS 3.1)

В итоге я оставил UIImageView нетронутым в IB, но с пустым значением .image . Модифицированный код выглядит примерно так:

- (void)viewDidLoad {
    NSString *path = [NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] resourcePath], @"myImageThatBeforeWasAValueinIB.jpg"];
    UIImage *image = [UIImage imageWithContentsOfFile:path];
    outlet.image = image;
    // do the rest of my stuff as it was
    [super viewDidLoad];
}

- (void)dealloc {
    outlet.image = nil;
    [outlet release], outlet = nil;
    [super dealloc];
}

И теперь все работает как шарм! Память восстанавливается, когда я выгружаю перо и когда получаю предупреждения о памяти.

В значительной степени, если у вас есть IBOutlets для UIImageView s, а память - это проблема (это всегда я угадайте), вы можете спроектировать все, что хотите, в IB, и когда придет время подключить их к розеткам, удалить ссылку на изображение в IB и создать его из кода. IB действительно хорош для создания вашего приложения. Было бы отстойно делать все это с помощью кода, но я также нашел эту прекрасную утилиту, которая конвертирует перья в код цели c , хотя я еще не тестировал ее.

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

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

6
ответ дан 14 December 2019 в 13:41
поделиться

Вы пытались установить нулевые переменные выхода в dealloc? You are correctly implementing the setView method, but you are setting your outlet variables to nil in the viewDidUnload method instead of dealloc. As discussed here, you should implement dealloc as follows:

- (void)setView:(UIView *)aView {
    if (!aView) { // view is being set to nil
        // set outlets to nil, e.g.
        self.anOutlet = nil;
    }
    // Invoke super's implementation last
    [super setView:aView];
}

- (void)dealloc {
    // release outlets and set outlet variables to nil
    [anOutlet release], anOutlet = nil;
    [super dealloc];
}

EDIT: if the outlets are UIImageViews, then it may be the case that you need to do

anOutlet.image = nil;

because setting the UIImage’s instance image property should increase the retain count of the UIImage’s instance by 1.

0
ответ дан 14 December 2019 в 13:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: