代码之家  ›  专栏  ›  技术社区  ›  Mazyod

我的iPhone应用程序从后台返回后崩溃了。原因:UIImage问题

  •  0
  • Mazyod  · 技术社区  · 14 年前

    现在,我的问题是:

    当我启动我的应用程序时,我有一个UIImageView,它根据中的if/else语句加载图像

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

    方法。这些图像分配如下:

    BG.image = someImage;
    

    - (void)viewDidLoad {
    
    //init stuff from file
    someImage = [UIImage imageNamed:@"FirstViewBG_5N.png"];
    
    [super viewDidLoad];}
    

    我的应用程序运行愉快,加载图像根据触摸开始(如前所述),但!

    当我的应用程序被发送到后台并返回时,它会在第一次触摸时崩溃。

    BG.image = someImage
    

    使用:

    BG.image = [UIImage imageNamed:@"FirstViewBG_5N.png"];
    

    它跑得很开心?!我觉得你的形象被冲淡了还是腐败了?

    我不想让它这样,因为imageNamed方法每次都从磁盘读取数据,这会导致性能问题,我想?

    我想我的问题很清楚?它是:

    2-我该如何解决这个问题?

    谢谢你的帮助! 谢谢!

    2 回复  |  直到 14 年前
        1
  •  2
  •   Joshua Nozzi    14 年前

    我猜这次崩溃是因为访问错误(但我猜是因为你没有发布这些信息)。

    如果“someImage”是一个实例变量,您应该综合它并使用它的访问器(自我形象)所以它被保留或复制。从目前的情况来看,您正在将某些内容分配给someImage,但当您稍后尝试访问它时,它就消失了。

        2
  •  0
  •   alexantd    14 年前

    当您这样做时:

    - (void)viewDidLoad {
    
        //init stuff from file
        someImage = [UIImage imageNamed:@"FirstViewBG_5N.png"];
    
        [super viewDidLoad];
    }
    

    这个 imageNamed 方法返回一个自动释放的对象,该对象在 viewDidLoad

        someImage = [[UIImage imageNamed:@"FirstViewBG_5N.png"] retain];
    

    或者使用自动保留的合成设置器:

        [self setSomeImage:[UIImage imageNamed:@"FirstViewBG_5N.png"]];
    

    或者使用UIImage的 initWithData 初始值设定项:

        someImage = [[UIImage alloc] initWithContentsOfFile:@"FirstViewBG_5N.png"];
    

    它们在功能上是等价的。#2或3是最好的。

    http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html%23//apple_ref/doc/uid/20000994-BAJHFBGH