困扰我的多线程

第一次使用多线程,很多地方考虑不周,调试过程中遇到了种种问题,开始摸不到头绪,不知道问题在哪里;

今天终于把问题解决了,但是为什么会造成“给已释放的对象发送消息”还是没有弄明白,没看出那个对象它哪里被提前释放了,

是因为开启的多个线程中调用了同一个方法,而方法中的同一个全局变量在这些开启的不同线程中被使用造成的吗?

每次执行到方法

-(void)waitforHostIP

    while (self.dealmessagesocket.hostIP==nil) {

        if (self.multicastsocket.gethostIP!=nil) {

            NSLog(@"%@",self.multicastsocket.gethostIP);

            self.dealmessagesocket.hostIP=[self.multicastsocket.gethostIP copy];

        } 

    }

}

中的

self.dealmessagesocket.hostIP=[self.multicastsocket.gethostIP copy];

就会报错;

self.multicastsocket.gethostIP为一个组播类中成员变量,当组播中获取到服务器ip的时候便把ip赋值给它;


- (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data

      fromAddress:(NSData *)address

withFilterContext:(id)filterContext

{

    NSString *message=[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    if(message)

    {

      

        NSString *ip=[[[NSString alloc] init] autorelease];

        uint16_t port = 0;

        [GCDAsyncUdpSocket getHost:&ip port:&port fromAddress:address];//这里如果我直接把ip换成self.gethostIP,也

//会报错,会在GCDAsyncUdpSocket 中的一个断言处停下来。

        self.gethostIP=ip;

    }

    [message release]; 

}


最后我选择的解决办法是调整了一下消息发送与处理的结构,只开启关于那个方法的一个线程,再调试,便解决了

警醒自己,多多摸索

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值