Resolved by retain the data object in writeCommand method:
-(void) writeCommand:(NSString *)cmd tag:(long)theTag
{
NSMutableData *data = [NSMutableData dataWithData:[cmd dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:[GCDAsyncSocket CRLFData]];
[data retain];//release it in dealloc
[asyncSocket writeData:data withTimeout:-1 tag:theTag];
}