草庐IT

objective-c - 如何测试一个 block 是否被调用

我有一个方法的单元测试,该方法应该调用完成block或失败block。现在我知道每种情况下应该调用哪个,所以我在不应调用的block中使用STFail。我现在如何测试应该调用的block是否真的被调用了?这是我的设置:NSString*parameter=@"foo";[controllerdoSomethingWithParameter:parameterwithcompletionBlock:^(NSString*result){//Thisblockshouldbeinvoked//CheckiftheresultiscorrectSTAssertEquals(result,kS

iphone - 我如何终止/暂停/关闭 GCD 中的异步 block ?

我已经实现了一个使用GCD异步分派(dispatch)的block,如下所示:__blockBOOLretValue;dispatch_async(dispatch_get_global_queue(0,0),^{retValue=[selfGCDHandler:actionNameWithServiceType:serviceType:arguments];});returnretValue;如果它运行的时间比我想要的要长,我该如何取消这样的block?有没有办法取消GCD分派(dispatch)的block,或者为它们提供超时? 最佳答案

ios - 从 Objective-C Block 访问分配委托(delegate)属性? (iOS)

可以从block访问委托(delegate)属性吗?@interfaceTheObject:NSObject...@property(nonatomic,assign)iddelegate;@synthesizedelegate-(void)someMethod{[someObjectdoSomethingWithCompletionHandler:^(NSArray*)someArray{[self.delegateotherMethod:someArray];}];}如果在调用完成处理程序之前委托(delegate)被取消(从也设置了委托(delegate)的对象中的dealloc

ios - block 的执行总是延迟

我是IOS的新手。我想在viewDidLoad中获取设备上的所有图片。但该block总是在我调用NSLog(@"%d",photos.count)后执行,如下所示。遇到这种情况怎么办?__blockNSMutableArray*photos=[[[NSMutableArrayalloc]init]retain];ALAssetsLibrary*library=[[ALAssetsLibraryalloc]init];void(^assertsEnumerator)(ALAsset*,NSUInteger,BOOL*)=^(ALAsset*result,NSUIntegerindex,B

objective-c - 将 __block 与 self 一起使用

我知道有几种方法可以做到这一点。但我想检查我这样做的方式是否会导致泄漏。我的项目中有一个block(使用ARC),为了防止保留周期,我做了以下操作id__blockblockSelf=self;然后在block内将self替换为blockSelf。这是一个好的编码习惯吗干杯 最佳答案 您的代码仍将在block内保留一个self对象-我执行以下操作:__weakSomeObject*weakSelf=self;参见thisanswer也是。希望这对您有所帮助! 关于objective-c-

iphone - 使用返回并接受参数的 block

所以在AFNetworking中有一个函数如下:+(AFImageRequestOperation*)imageRequestOperationWithRequest:(NSURLRequest*)urlRequestimageProcessingBlock:(UIImage*(^)(UIImage*))imageProcessingBlockcacheName:(NSString*)cacheNameOrNilsuccess:(void(^)(NSURLRequest*request,NSHTTPURLResponse*response,UIImage*image))successf

iPhone iOS 使用 UIView animateWithDuration block 执行操作的正确方法是什么?

我在想什么是响应用户事件执行“长”操作的正确方法。例如,我有这张幻灯片来取消block,该block在0.5秒内自动离开屏幕。[selfcoreDataAction]本身可能需要大约0.3秒。我想确保操作在用户看到动画结束时完成(我不希望用户意外导航到不同的Controller或关闭应用程序以为操作已完成)。在这种情况下,我应该将[selfcoreDataAction];放在哪里?在block之上、block内还是完成block中?//shouldIputithere?CGPointslideToCancelCenter=slideToCancel.view.center;[UIVie

ios - CATiledLayer:如何仅重新加载一些图 block ?

我在ScrollView中使用平铺层来显示自定义View。自定义View的内容会定期更改,并且我知道发生这些更改的矩形。但是我发现,如果我执行setNeedsRedisplay,则只会重绘一个图block。我怎样才能告诉CATiledLayer只重绘受影响的图block? 最佳答案 如果您在CATiledLayer上调用setNeedsDisplay,则它会重绘其所有图block。如果您改用setNeedsDisplayInRect,它应该只重绘那些与您指定的矩形相交的图block。但请注意,它会重绘整个图block,而不仅仅是与矩

ios - AFNetworking 完成 block

在我当前的设计中,我有一个代表文件夹结构的TableView。当用户点击单元格时,将创建一个AFHTTPRequestOperation来下载文件。文件已下载,而单元格当前显示当前下载状态:无/已下载/正在下载。下载状态设置在与每个单元格对应的NSManagedObject上。在我的下载完成block中,我将下载状态设置为“已下载”标志。这样做的问题是,如果用户从当前的TableView数据导航到另一个,竞争block将设置错误的NSManagedObject-它根据NSIndex。简而言之,我想知道如何将一个对象与我的AFHTTPRequestOperation一起传递,以便在完成时

iphone - 返回从 block 内部设置的 NSString

我有一个看起来像这样的方法:-(NSString*)getCityFromLocation:(CLLocation*)location{__blockNSString*city;CLGeocoder*geocoder=[[CLGeocoderalloc]init];[geocoderreverseGeocodeLocation:locationcompletionHandler:^(NSArray*placemarks,NSError*error){//GetaddressCLPlacemark*placemark=[placemarksobjectAtIndex:0];city=[p