В одном из моих модулей мне нужно поддерживать механизм на основе событий.Логика:
Чтобы отправить событие:
-(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.Может кто-нибудь дать мне подсказку, как отлаживать?Я проверил все аспекты памяти, но ничего не смог найти.