NSLog оператор не печатает мой объект - PullRequest
0 голосов
/ 28 января 2012

Если я добавлю объект к свойству "dreamsArr", которое является NSMutableArray:

@synthesize dreamsArr;

-(void) viewDidLoad
{
    Dream *d1 = [[Dream alloc] init];
    d1.title = [[NSString alloc] initWithString:@"my 1st dream"];

    self.dreamsArr = [[NSMutableArray alloc] init];
    [self.dreamsArr addObject:d1];

    Dream *dr = [self.dreamsArr objectAtIndex:0];
    NSString *title=dr.title;

    const char *chTitle = [title UTF8String]; 
    NSLog(@"%s", chTitle);
}

Почему NSLog печатает "ноль"? когда я отслеживаю этот код, после [self.dreamsArr addObject: d1] dreamsArr все еще пуст, почему?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2012

проблема была в другой части кода

0 голосов
/ 28 января 2012

Поскольку вы используете заполнитель массива char (%s) в операторе NSLog вместо объекта, который следует использовать для печати NSString. Попробуйте это:

NSLog("%@", chTitle);

Также, если вы не используете ARC, у вас есть утечка во 2-й и 4-й строках метода viewDidLoad.

В строке ниже есть утечка

d1.title = [[NSString alloc] initWithString:@"my 1st dream"];

Утечка происходит из-за присвоения свойства title, которое (я предполагаю) имеет значение @property с модификатором retain. Вызов alloc создает объект с +1 сохраняемым счетом, в то время как присваивание делает его +2. Так как вы не уравновешиваете это с помощью release вызова ниже в методе - вы получаете утечку. То же самое относится и к 4-й строке:

self.dreamsArr = [[NSMutableArray alloc] init];

, который создает утечку таким же образом.

Утечки действительны только в том случае, если вы не выпускаете переменную dreamsArr экземпляра в методе viewDidUnload и переменную title в методе dealloc вашего класса Dream.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...