mom*_*omo 0 objective-c parameter-passing pass-by-reference ios
我有一个UITableView
显示图像的单元格.在cellForRowAtIndexPath
方法上,我启动连接以获取图像.我想跟踪已经请求的图像,以避免多次请求相同的图像.
我设置了这样的方法
+(void) setImageFromURL:(NSURL*) url fromImage:(UIImage*) srcImage to:(UIImageView*) dstImage wasRequested:(BOOL*) requested;
Run Code Online (Sandbox Code Playgroud)
并称之为这样
[Utils setImageFromURL:event.thumbURL fromImage:event.thumbImage to:cell.image wasRequested:event.thumbRequested];
Run Code Online (Sandbox Code Playgroud)
event.thumbRequested是BOOL属性.方法看起来像这样
+(void) setImageFromURL:(NSURL*) url fromImage:(UIImage*) srcImage to:(UIImageView*) dstImage wasRequested:(BOOL*) requested{
if (srcImage != nil) {
dstImage.image = srcImage;
} else if (!requested) {
requested = YES;
@try {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSData * data = [[NSData alloc] initWithContentsOfURL: url];
if ( data == nil )
return;
dispatch_async(dispatch_get_main_queue(), ^{
__block UIImage* srcImage = [UIImage imageWithData: data];
dstImage.image = srcImage;
});
[data release];
});
}
@catch (NSException *exception) {
NSLog(exception.debugDescription);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是BOOL
由于价值行为的传递而没有改变Objective-C
.任何人都可以推荐一种能够BOOL
从mehod内部更新事件对象的方法吗?
这条线:
requested = YES;
Run Code Online (Sandbox Code Playgroud)
需要是:
if (requested) {
*requested = YES;
}
Run Code Online (Sandbox Code Playgroud)
检查只是nil
因为传入了requested
.
编辑:电话应该是:
BOOL requested = event.thumbRequested;
[Utils setImageFromURL:event.thumbURL fromImage:event.thumbImage to:cell.image wasRequested:&requested];
event.thumbRequested = requested;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1962 次 |
最近记录: |