мне нужно вручную создать NSMutableArray, если он уже покрыт методом property & synthesize? (код прилагается) - PullRequest
0 голосов
/ 21 марта 2011

Нужно ли вручную создавать NSMutableArray, если он уже покрыт методом property & synthesize?

В приведенном ниже коде я вижу проблему, из-за которой метод addEvent, похоже, неработатьДаже после вызова счетчик переменной _events по-прежнему равен нулю (0).Мне интересно в этом коде, может ли быть проблема в том, что мне нужно вручную создать / инициализировать массив?(и не полагайтесь на метод sythesize, делающий это)

Заголовочный файл

#import <Foundation/Foundation.h>
@interface Weekend : NSObject {
    NSMutableArray* _events;       
}

- (void)addEvent:(EKEvent*)event;
@property (nonatomic, retain) NSMutableArray* events;

@end

Реализация

#import "Weekend.h"
@implementation Weekend
@synthesize events = _events;

- (void)addEvent:(EKEvent*)event {
    [self.events addObject:event];
}

@end

Ответы [ 4 ]

4 голосов
/ 21 марта 2011

Да.

@synthesize автоматически создает методы получения / установки, которые используются при обращении к self.events.Он не выделяет (или не освобождает) объект _events для вас.

3 голосов
/ 21 марта 2011

Вы можете создать его в методе init, но если вы хотите немного поумнеть, вы также можете переопределить метод getter следующим образом:

-(NSMutableArray *)events
{
    if (_events == nil) {
        _events = [[NSMutableArray alloc] init];
    }
    return _events;
}

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

Помните, что вам все еще нужно освободить в методе dealloc.

1 голос
/ 21 марта 2011

сначала нужно выделить память.

0 голосов
/ 21 марта 2011

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

_events = [[NSMutableArray alloc] init]; & затем добавьте объекты в этот массив.

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

_events = ноль; [_events release];

Если вы хотите получить доступ к свойствам getter и setter, тогда & затем только выполните

@ property (nonatomic, retain) NSMutableArray * events; & синтезировать массив, иначе он просто будет работать для вас.

...