【问题标题】:Modify BOOL inside method in iOS在 iOS 中修改 BOOL 内部方法
【发布时间】:2012-10-31 05:23:11
【问题描述】:

我有一个UITableView,它显示带有图像的单元格。在cellForRowAtIndexPath 方法上,我启动了一个连接来获取图像。我想跟踪已经请求了哪些图像,以避免多次请求同一个图像。

我设置了这样的方法

+(void) setImageFromURL:(NSURL*) url fromImage:(UIImage*) srcImage to:(UIImageView*) dstImage wasRequested:(BOOL*) requested;

然后这样称呼它

[Utils setImageFromURL:event.thumbURL fromImage:event.thumbImage to:cell.image wasRequested:event.thumbRequested];

其中 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);
        }
    }
}

我的问题是BOOL 没有因为Objective-C 中的值传递行为而改变。谁能推荐一种能够从方法内部更新事件对象中的BOOL 的方法?

【问题讨论】:

    标签: objective-c ios parameter-passing pass-by-reference


    【解决方案1】:

    行:

    requested = YES;
    

    需要:

    if (requested) {
        *requested = YES;
    }
    

    检查只是以防nil 被传递给requested

    编辑:调用应该是:

    BOOL requested = event.thumbRequested;
    [Utils setImageFromURL:event.thumbURL fromImage:event.thumbImage to:cell.image wasRequested:&requested];
    event.thumbRequested = requested;
    

    【讨论】:

    • 我遇到了这个代码的另一个问题,fromImage UIImage* 参数应该在方法中初始化,但事件实例中的变量没有分配。我该如何解决?
    • 太棒了,谢谢。我忘记了“从不取消引用空指针”。
    猜你喜欢
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    • 2012-04-26
    • 2019-02-23
    • 1970-01-01
    • 2023-03-22
    • 2013-07-02
    相关资源
    最近更新 更多