代码之家  ›  专栏  ›  技术社区  ›  Dan Ray

目标C定义

  •  2
  • Dan Ray  · 技术社区  · 14 年前

    这是一个令人痛苦的新手问题,但在这里,我正在学习一种新的语言和框架,我试图回答这个问题:“什么是真相?”与OBJ-C有关。

    我正在尝试通过网络延迟加载图像。我有一个名为事件的数据类,其属性包括:

    @property (nonatomic, retain) UIImage image;
    @property (nonatomic, retain) UIImage thumbnail;
    

    在AppDelegate中,我获取了一系列关于我的事件的数据(这是一个显示本地艺术事件列表的应用程序),并将每个event.image预先设置为默认的“no image.png”。

    然后在我查看这些内容的uiTableViewController中,我执行以下操作:

    if (thisEvent.image == NULL) {
        NSLog(@"Going for this item's image");
        UIImage *tempImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:
                      [NSURL URLWithString:
                        [NSString stringWithFormat:
                        @"http://www.mysite.com/content_elements/%@_image_1.jpg",
                                  thisEvent.guid]]]];
        thisEvent.image = tempImage;
    
    }
    

    我们从来没有接到过nslog的电话。测试thisevent.image是否为空不是问题。我试过了 == nil 当然,但这也不管用。

    3 回复  |  直到 14 年前
        1
  •  4
  •   Quentin    14 年前

    延迟加载将如下所示:

    @property (nonatomic, read-only) UIImage *image;
    
    - (UIImage *)image {
       if (!image) {
           image = [[UIImage imageWithData:[NSData dataWithContentsOfURL:
                  [NSURL URLWithString:
                    [NSString stringWithFormat:
                    @"http://www.mysite.com/content_elements/%@_image_1.jpg",
                              thisEvent.guid]]]] retain];
      }
    
      return image;
    }
    

    别忘了在DealLoc中释放图像。

    当做,

        2
  •  4
  •   Paul Lynch    14 年前

    如果将image设置为no-image.png,则不会为nil(objective-c对对象值使用nil,则应使用该值而不是空值,尽管它的值相同,但其用途不同)。

        3
  •  2
  •   Community uzul    7 年前

    当你构建表格单元格时,你真的不想从网上加载图像,你的表格滚动速度会非常慢。

    看看苹果的例子 LazyTableImages 如何做到这一点 this SO question 也许也有帮助。