草庐IT

collisions_block

全部标签

ios - 用嵌套 block 保留 self ?

使用以下代码:@interfaceMyClass(){NSMutableArray*dataArray;}@end@implementationMyClass-(void)doSomething{__typeof__(self)__weakwself=self;dispatch_async(dispatch_get_global_queue(0,0),^{__typeof__(self)sself=wself;[sself->dataArrayaddObject:@"HelloWorld"];dispatch_async(dispatch_get_main_queue(),^{[NST

ios - 你如何在 block 之间访问 NSManagedObject?

正如标题所说,如何访问在一个block中创建然后需要在另一个block中访问的NSManagedObject。我有以下实现,想知道它是否正确。__blockPerson*newPerson;@weakify(self);[MagicalRecordsaveWithBlock:^(NSManagedObjectContext*localContext){newPerson=[PersonMR_createInContext:localContext];newPerson.name=@"Bob";}completion:^(BOOLsuccess,NSError*error){@stron

ios - Xcode 9 : Block Based KVO Violation for observeValue function

我在项目中启用了SwiftLint,它会针对以下函数发出警告:overridefuncobserveValue(forKeyPathkeyPath:String?,of_:Any?,change:[NSKeyValueChangeKey:Any]?,context_:UnsafeMutableRawPointer?){...}Shell脚本调用警告:基于block的KVO违规:在使用Swift3.2或更高版本时,首选基于block的新KVOAPI和关键路径。有什么解决办法吗? 最佳答案 制作BlockBaseKVO的好教程Herec

javascript - iOS 12.2 : device orientation data still blocked even after manual enabling in settings

在iOS12.2中,Apple默认阻止访问设备方向数据。现在必须手动启用它(-__-),如here所述.问题是,即使在设置中启用“Motion&OrientationAccess”之后,当我尝试在deviceorientation事件上设置监听器时,我在Safari调试器上收到了这条警告消息:functiononDeviceOrientationChange(e){console.log(e)}window.addEventListener("deviceorientation",onDeviceOrientationChange,false);//--->Blockedattempt

objective-c - 为什么我应该使用基于 block 的动画而不是开始/结束动画?

如您所知,Apple鼓励我们在iOS4.0上使用一种称为基于block的动画的新方法来制作动画。我真的很想知道什么基于block的动画比开始/结束风格的动画更好。性能?并发?编码效率和便利性? 最佳答案 我当时也想过这个问题。但是在使用像这样的基于block的动画之后:[UIViewanimateWithDuration:0.5...^{//animatedcustomviewvertically}completion:^{[UIViewanimateWithDuration:0.5...^{//animatethefadeinal

objective-c - 在 block 参数内向下转换是一种不好的做法吗?

举个例子,不要这样写:NSArray*someArray=@[@"1",@"2",@"3",@"4"];[someArrayenumerateObjectsUsingBlock:^(idobj,NSUIntegeridx,BOOL*stop){NSString*aString=obj;//dosomething}];如果你知道block方法中的常量,你可以直接向下转换对象以使其更简洁:[someArrayenumerateObjectsUsingBlock:^(NSString*aString,NSUIntegeridx,BOOL*stop){//dosomething}];这是否违反

iphone - iOS block - 使用未声明的标识符 self

我是block的新手。我在一个单例里面,我这样做void(^myBlock)()=^(){[selfdoStuff];};我收到此错误使用未声明的标识符自身。doStuff是单例内部的一个方法。但是如果这个block是在另一个方法中声明的,Xcode是可以的。这是为什么呢?谢谢。 最佳答案 您可以在您的界面中定义block并在您的@implementation文件中的任何方法(包括初始化程序)中初始化,如下所示:@interfaceYourClass{void(^myBlock)();}@implementationYourClas

ios - 最后一个 block 返回时触发方法

当我确信两个block代码都已返回时,我如何触发一个方法?像这样...//RetrieveMessagesArrayfromParse[ParseManagerretrieveAllMessagesForShredderUser:(ShredderUser*)[PFUsercurrentUser]withCompletionBlock:^(BOOLsuccess,NSError*error,NSArray*objects){self.messagesArray=objects;}];//RetrieveMessagesPermissionsArrayfromParse[ParseMan

iOS: block 复制并添加到可变数组,清空数组时是否需要释放它们?

如果我有:SomeBlockmyBlock=^(){};[self.mutableArrayaddObject:[myBlockcopy]];稍后如果我需要:[self.mutableArrayremoveAllObjects];那我是否应该先遍历数组中的所有block并释放它们中的每一个?谢谢编辑:我没有使用ARC,当我将block添加到数组时我在某处看到我需要复制它,这就是为什么我在将它添加到数组时执行[blockcopy]的原因,因此我我认为我应该在从数组中删除所有对象之前释放它们。 最佳答案 我假设您不使用ARC(那么这个问

ios - 如何将 NSArray 参数传递给完成 block

我想将另一个NSArray作为参数传递给完成block方法,因为我是这个概念的新手,所以我不明白该怎么做。目前我只传递一个数组,但现在我想传递第二个nsarray,在第二个数组中,我想传递带有值的数组,以便我可以在那里使用typedefvoid(^completion)(NSArray*list);-(void)getMoreData:(completion)completion调用方法[Magento.servicegetMoreData:^(NSArray*list){if(list){}在上面的方法中,我想传递NSArray,这个方法在不同的类中,我从不同的地方调用。此数组正在此