添加到NSOperationQueue时的exc_bad_acccess

时间:2011-07-26 09:38:44

标签: iphone objective-c multithreading memory nsoperationqueue

我已经将NSOperation子类化了 - (void)main是正常的,(因为它在使用NSOperation之前工作),我还逐步完成了init方法,并且变量被正确初始化。 - (id)initWithSampleBuffer:完成之后所有的难度都已经完成,我正在尝试将uploadOperation添加到NSOperationQueue:

UploadOperation *ulOp = [[UploadOperation alloc] initWithSampleBuffer:sampleBuffer];
[queue addOperation:ulOp]; //here i get exc_bad_access
[ulOp release];

我得到了exc_bad_access。我已经尝试过断点,我可以看到队列存在,ulOp也是如此。 我无法弄清楚我做错了什么,因为根据我的理解,当你试图将“消息”传递给已经解除分配的东西时,就会发生exc_bad_access,显然,没有一个是。

- (id)initWithSampleBuffer:(CMSampleBufferRef) aSampleBuffer {
    sampleBuffer = aSampleBuffer;

    VideoStreamViewController *vc = [VideoStreamViewController shared];
    ul = [[Uploader alloc] initWithURL:[NSURL alloc] filePath:@"" delegate:vc doneSelector:@selector(didFinishUpload:) errorSelector:@selector(uploadFailed:)];

    return self;
}

然而Uploader的东西,不是问题(我删除了它,仍然得到相同的结果)。从我可以看到CMSampleBuffer对象没有问题,它被初始化!

队列初始化:

在.h:

NSOperationQueue *queue;
@property (nonatomic, retain) NSOperationQueue *queue;

in .m:

@synthesize queue;
self.queue = [[NSOperationQueue alloc] init];
[queue setMaxConcurrentOperationCount:1];

1 个答案:

答案 0 :(得分:5)

你没有在构造函数中调用[super init]

假设您正在继承NSOperation(或NSObject等...),您可能应该这样做!