我是否需要手动创建一个NSMutableArray,如果它已被属性&合成方法? (附代码)

时间:2011-03-21 04:01:24

标签: iphone objective-c ios nsmutablearray nsarray

我是否需要手动创建一个NSMutableArray(如果它已被属性&合成方法?

在下面的代码中,我看到一个问题,即“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 个答案:

答案 0 :(得分:4)

@synthesize会自动创建引用self.events时使用的getter / setter方法。它不会为您分配(或释放)_events对象。

答案 1 :(得分:3)

你可以在init方法中创建它,但如果你想获得一点点发烧友,你也可以覆盖这样的getter方法:

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

如果你这样做而不是在init方法中,那么你的变量只有在实际需要时才会被启动,这在某些情况下会很方便。

请记住,你仍然需要在dealloc方法中发布。

答案 2 :(得分:1)

你需要先分配内存。

答案 3 :(得分:0)

问题是您需要为数组分配内存..

_events = [[NSMutableArray alloc] init]; &安培;然后将对象添加到此数组中。

&安培;也不要忘记在适当的地方发布这个数组,否则会造成很多崩溃问题。

_events = nil; [_events release];

如果你想访问吸气剂和放大器然后是setter属性&amp;那么只做

@property(nonatomic,retain)NSMutableArray * events; &安培;合成数组,否则它只会对你有用。