在我的一个模块中,我需要维护基于事件的机制。其中的逻辑是:当事件收到Mac OS X程序EXEC_BAD_ACCESS
-(void)addEvent:(EventData *)pData{
[self enQueueEvent:pData];
[[NSNotificationCenter defaultCenter]
postNotificationName:EVENT_NAME
object:nil ];
}
-(void)enQueueEvent:(EventData *)pData{
[pEventLock lock];
[self.pEventArray insertObject:(NSObject *)pData atIndex:0];
[pEventLock unlock];
}
:
要发送的事件
-(void)EventHandler: (NSNotification *) notification
{
[self log:@"event Handled"];
EventData *pData = [self deQueueEvent];
if(pData){
switch(pData->eModuleId){
case UI_EVENT:{
[UIController HandleUICallBack:(EventType)pData->eType LParam:pData->lParam WParam:pData->wParam];
}
}
pData->lParam = 0x00;
pData->wParam = 0x00;
free(pData);
// [pData release];
//[self removeProcessedEvent];
}
}
-(EventData *)deQueueEvent{
[pEventLock lock];
NSObject *pData = [self.pEventArray lastObject];
[self.pEventArray removeLastObject];
[pEventLock unlock];
return (EventData *)pData;
}
>>>>>>> Adding Header File Declaration >>>>>>>>>>>>>>>>>>>
typedef struct __eventData{
ModuleId eModuleId;
EventType eType;
void *lParam;
void *wParam;
}EventData;
@interface CommEventHandler : NSObject {
NSMutableArray *pEventArray;
bool shouldStartTimer;
int timerValue;
NSLock *pEventLock;
}
@property(nonatomic,retain)NSMutableArray *pEventArray;
@property(nonatomic,retain)NSLock *pEventLock;
<<<<<<<<<<<<<<<< End of Header File <<<<<<<<<<<<
我相信这是很容易理解。现在发生的事情是,当我在10.6 | App Name | Debug | i386
中运行程序时,它运行得非常好,但是当我在10.6 | App Name | Debug | X86_64
中运行程序时,在将节点插入到Event阵列时发生故障。任何人都可以给我一个线索如何调试?我检查了所有的内存方面,但没有找到任何东西。
“pEventArray”是一个声明的属性吗?如果是这样,它的setter语义是什么:'assign','copy','retain'? – 2011-05-13 08:21:50
什么是'CommEventData'的实际声明? – 2011-05-13 08:23:07
什么是'EventData'的实际声明呢? – 2011-05-13 08:29:04