내 모듈 중 하나에서 이벤트 기반 메커니즘을 유지 관리해야합니다. 논리는 : 이벤트가 수신되면EXEC_BAD_ACCESS를 제공하는 Mac OS X 프로그램
-(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
에서 프로그램을 실행하면 노드가 이벤트 배열에 삽입되는 동안 오류가 발생합니다. 누구든지 디버그하는 방법을 내게 줄 수 있습니까? 모든 메모리 측면을 검사했지만 아무것도 찾지 못했습니다.
'pEventArray'는 (는) 선언 된 속성입니까? 그렇다면 setter의 의미는 무엇입니까?'assign','copy','retain'? –
그리고 CommEventData의 실제 선언은 무엇입니까? –
그리고'EventData'의 실제 선언은 무엇입니까? –