我有BAD_ACCESS错误 - 我的内存分配是否正确

时间:2016-02-25 19:28:12

标签: objective-c multithreading objective-c-blocks nsdata exc-bad-access

所以这就是我想要做的事情

@implementation someHelper

+(BOOL) GetInfo:(NSData **)info1, (NSString**) info2
{
   __block _Bool out = NO;

    //do stuff to get input

    [[Bool result] startSession:input callsBack:^(Abc obj, Bool status)
    {
        if(status)
        {
            *info1 = [obj.Data1 subdataWithRange:NSMakeRange(0,2);
            *info2 = obj.string1;
            out = true;
        }
        else
        out = false;
   }];
   return out
}

调用看起来像

NSString *a;
NSData   *b;
output = [someHelper GetInfo:(NSData **)&a (NSString **)&b];

我认为我在这里缺少的是info1info2的实际内存分配。我是Obj C的新手,我不清楚我需要做些什么才能正确分配。

当我尝试

 NSMutableData *info1 = [NSMutableData dataWithCapacity: 2];
 *info1 = [obj.Data1 subdataWithRange:NSMakeRange(0,2);

我明白了     Assigning to NSMutableData from incompatible type NSData

有人可以帮助我更好地了解这一点以及如何解决问题吗?

1 个答案:

答案 0 :(得分:0)

更有可能startSession:callsBack:是立即返回的异步方法。在回调块中,您应该将字符串和数据传递给对更新值感兴趣的任何内容。

鉴于Objective-C标准与命名约定和编码模式的距离有多远,我建议还要重新讨论如何使用Objective-C。