佚名通过本文主要向大家介绍了400 bad request,http 400 bad request,ajax 400 bad request,java 400 bad request,手机400bad request等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:400 bad request iOS block回调无法bad acess问题
描述:
解决方案1:
描述:
代码里做了block回调,但是无法取到值,代码如下,麻烦看下,对于block不是很懂.问题应该是出在多线程上,dispatch after这句是在子现场执行的,直接报错了
for (int i = 0; i<self.nativeVedioPathArr.count; i++) {
__weak __typeof(self)weakSelf = self;
[feedFile resumableUploadAndCallServerWithCallback:^(BOOL isSuccess, NSData * data, NSError * error) {
if (isSuccess) {
weakSelf.updatedVedioCount++;
if (weakSelf.updatedVedioCount != weakSelf.nativeVedioPathArr.count) {
}
} else {
}
if (weakSelf.updatedVedioCount == weakSelf.nativeVedioPathArr.count) {
dispatch_async(dispatch_get_global_queue(0, 0), ^{
[weakSelf deleteVedioPath];
});
if (weakSelf.nativeVedioPathArr.count == 1) {
__strong __typeof(weakSelf)strongSelf = weakSelf;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[CoreSVP showSVPWithType:CoreSVPTypeSuccess Msg:@"上传视频完成" duration:0.5 allowEdit:nil beginBlock:nil completeBlock:^{
//上传成功后回调
strongSelf.completeVedioBlock(strongSelf.correctVedioPathArr.copy);
}];
});
}
}
} withProgressCallback:^(float progress) {
}];
}
解决方案1:
代码比较乱,大概看了一眼。
block 也不是很难就是封装一段代码,主要是行为比较复杂。
异步 + block 出现 坏访问, 一般都是线程时序问题。
我说block 和 多线程的注意点, 楼主可以自行去捋。
多线程下 哪条线程先被执行是不确定的, 捋一捋时序问题。
arc下默认是强引用
block 被强引用并且内部访问了自动变量(这个自动变量不是被弱引用修饰),那么block在堆区。
如果block 被强引用,但是内部访问的自动变量是弱引用, 比如 weakSelf ,那么block在栈区。