В классе с именем утилита, я использую один статическое изображение, чтобы загрузить все кнопки в поле зрения, как это:Должен ли я вернуть статический UIImage или вернуть копию?
static UIImage *baseImage_bottomToolbarBG;
+ (void) initialize {
baseImage_bottomToolbarBG =
[UIImage imageNamed:@"bottom-toolbar-background"];
// take bottom-toolbar-background, which is huge, copy it down to size
// at which it will actually be used
}
+ (void) dealloc {
baseImage_bottomToolbarBG = nil;
}
+ (UIImage *)getBottomToolbarImagePortrait {
return baseImage_bottomToolbarBG;
}
..., а затем настроить кнопку с помощью этого фонового изображения, Я называю это:
UIImage *image = [Utilities getBottomToolbarImage];
[button setBackgroundImage:image forState:UIControlStateNormal];
Является ли это ОК практика, или в моем getBottomToolbarImage
я должен сделать копию статической UIImage
и вернуть копию?
Это использование ARC и таргетингом IOS 4 +
Edit: см новый комментарий в initialize
метод
Это, вероятно, самый лучший способ, так как это означает, что изображение может получить выгружен, когда он не используется, находясь под давлением памяти (что UIImage, с помощью этого метод, позаботится). Если вы все еще хотите вставить его в статику, тогда вам нужно «-обеспечить» его, что будет держать его навсегда (хотя я считаю, что UIImage все равно может выгрузить данные растрового изображения, если он не используется при пониженном давлении, но Не цитируйте меня на этом. –
Я не указал в исходном вопросе, но фактически загружаю исходный файл, а затем сжимаю его и сохраняю статическую копию усохшего изображения. Я не хочу, чтобы мое приложение выполняло эту операцию каждый раз, когда мне нужно изображение на панели инструментов. – MusiGenesis
@KevinBallard 'UIImage' [задокументирован, чтобы очистить данные изображения в ситуации с низкой памятью) (https://developer.apple.com/library/ios/DOCUMENTATION/UIKit/Reference/UIImage_Class/Reference/Reference.html# // apple_ref/DOC/UID/TP40006890-СН3-SW2). –