以下はスレッドを含む私のコードです。このスレッドはキューのサイズを処理します。サイズが 10 より大きい場合はログに記録し、最後のオブジェクトを削除します。しかし、demo=[[myDemo alloc]init] を実行してスレッドを開始すると、例外メッセージが表示されます = 「EXC_BAD_ACCESS」。この問題を解決するのを手伝ってくれる人はいますか?
   @interface myDemo:NSObject
    {
        NSMutableArray  *q;
        NSThread        *thread;
        bool            running;
    }
    -(void)putData:(NSData *)data;
    -(NSData *)popData;
    -(void)stopThread;
    @end;
@implementation myDemo
    -(id)init
    {
        if(NULL!=(self = [super init]))
        {
            q=[NSMutableArray array];
            thread=[[NSThread alloc] initWithTarget:self
                                           selector:@selector(myThreadMainMethod:)
                                             object:nil];
            [thread start];
        }
        return self;
    }
    -(void)myThreadMainMethod:(id)object
    {
        unsigned long count;
        NSData *data;
        if(running) return;
        running=true;
        while(running)
        {
            @synchronized(self)
            {
                count=[q count];//crash !!!!
                if(count>10)
                {
                    data=[q lastObject];
                    NSLog(@"count=%d ,remove last data=%@",count,[[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]);
                    [q removeLastObject];
                }
            }
        }
        running=false;
    }
putData と popData は @synchronized(self) でキューにアクセス
-(void)putData:(NSData *)data
{
    @synchronized(self)
    {
        [q addObject:data];
    }
}
-(NSData *)popData
{
    NSData * data=NULL;
    unsigned long count;
    @synchronized(self)
    {
        count=[q count];
        if(count!=0)
        {
            data=[q lastObject];
            [q removeLastObject];
        }
    }
    return data;
}