Мне показалось, что я получаю управление памятью какао, но, кстати, у меня есть чему поучиться.Вопросы управления памятью
Взгляните на этот класс я писал:
Word.h
#import <UIKit/UIKit.h>
@interface Word : NSObject {
NSString *word;
NSMutableArray *wordArray;
}
@property (nonatomic ,retain) NSString *word;
@property (nonatomic ,retain) NSMutableArray *wordArray;
@end
Word.m
#import "Word.h"
@implementation Word
@synthesize word, wordArray;
- (void)setWord:(NSString *)aWord {
NSMutableArray *newValue = [[NSMutableArray alloc] init];
self.wordArray = newValue;
[newValue release];
for (int i = 0 ;i < [aWord length] ;i++) {
NSString *character = [[NSString alloc] init];
character = [NSString stringWithFormat:@"%C",[aWord characterAtIndex:i]];
[wordArray addObject:character];
//[character release];
}
}
- (void)dealloc {
[word release];
[wordArray release];
[super dealloc];
}
@end
Как вы можете видеть, я заполняю массив, когда устанавливаю строку. Я делаю это в цикле for, вытаскивая символ строки и помещая их в новую выделенную строку. Затем я помещаю эту строку в массив, а затем я должен освободить строку. И вот здесь я делаю это неправильно, потому что я выпускаю значение, которое я вставляю в массив. когда позже я пытаюсь использовать массив, его нет.
Как мне это сделать? он чувствует себя неправильно, чтобы сделать «характер» собственностью и освободить его в dealloc, потому что он просто временный.
Так ли пул авторезистов сливается, когда экземпляр класса мертв, могу ли я быть уверенным, что автореферат не высвободит мой объект слишком рано? – Oscar
Пул автореферации освобождается в цикле выполнения, то есть вне вашего обычного кода. Он не будет запускаться посреди одного из ваших методов. Редактирование: если вы используете фоновые потоки, где это может быть проблемой, вам нужно настроить локальный пул авторесурсов по этой причине. Но это не проблема. –
Хорошо, спасибо за помощь :) – Oscar