gpt4 book ai didi

ios - 将 __block 参数传递给类方法(用于获取请求)

转载 作者:行者123 更新时间:2023-12-01 18:55:44 25 4
gpt4 key购买 nike

我想创建以下类方法:

+(void) getValue4Key:(NSString*)p_key andSet:(id)p_variable
{
NSString *baseURLString = <<myURL>>;
@try{
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:baseURLString
parameters:nil
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSDictionary* element = responseObject[0];
element = [element objectForKey:@"fields"];

p_variable = [element objectForKey:@"value"];
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"getSystemVariableKey error: %@",error);
}];
}
@catch (NSException *exception) {
NSLog(@"exception %@", exception);
}
}

两个问题:
  • 我收到以下错误:变量不可分配(缺少
    __block 类型说明符)如何为方法参数设置 block ?
  • 如果我使用 &self.setMe 传递变量,如何调用此函数?
  • 最佳答案

    我不认为通过引用传递 ivar 以在以后异步设置的方法是一个好方法。如果对象(在问题 #2 中称为 self 中的 self.setMe )在请求完成之前被销毁怎么办?您将遇到随机崩溃。

    相反,您应该使用调用者可以用来设置 ivar 的完成 block 来处理这个问题:

    + (void)getValue4Key:(NSString*)p_key 
    withCompletion:(void (^)(id value))completion
    {
    NSString *baseURLString = <<myURL>>;
    @try{
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    [manager GET:baseURLString
    parameters:nil
    success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSDictionary* element = responseObject[0];
    element = [element objectForKey:@"fields"];

    id value = [element objectForKey:@"value"];
    if (completion) {
    completion(value);
    }
    }
    failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"getSystemVariableKey error: %@",error);
    if (completion) {
    completion(nil);
    }
    }];
    }
    @catch (NSException *exception) {
    NSLog(@"exception %@", exception);
    }
    }

    然后你会这样调用这个函数:
    YourObject *__weak weakSelf = self;
    [YourObject getValue4Key:@"your_key" completion:^(id value){
    weakSelf.setMe = value;
    }];

    现在,如果 self被摧毁, weakSelf将变为 nil,因此回调基本上是无操作的。

    这具有不需要通过引用传递 ivar 指针的额外优势,您会注意到,这在 iOS 框架中根本不经常发生( NSError 是我能想到的唯一异常(exception))。

    关于ios - 将 __block 参数传递给类方法(用于获取请求),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27322224/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com