【问题标题】:EXC_BAD_ACCESS on a simple array of UIImageViews一个简单的 UIImageViews 数组上的 EXC_BAD_ACCESS
【发布时间】:2011-06-20 06:00:59
【问题描述】:

这段代码有什么问题?

在界面中:

NSArray *myImages;
@property (nonatomic, retain) NSArray *myImages;

实现:

NSArray *array = [NSArray arrayWithObjects:
                [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image1.png"]],
                [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image2.png"]],        
                [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image3.png"]],
                nil];
self.myImages = array;
[array release];

如果我在初始化后立即记录 myImages,它会正确记录 UIImageViews 数组。但是,稍后在应用程序中,当我尝试从不同的方法访问 self.myImages 时,我得到 EXC_BAD_ACCESS。它被保留在界面中。有什么问题?

【问题讨论】:

    标签: iphone arrays memory uiimageview


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      不要释放array。使用arrayWithObjects:,它将返回一个自动释放的对象。从某种意义上说,你是在释放它两次。另一种选择是:

      [[NSArray alloc]initWithObjects:...]
      

      然后你可以释放array

      参见 Apple 的内存管理文章:

      http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html%23//apple_ref/doc/uid/20000043-BEHDEDDB

      【讨论】:

        【解决方案3】:

        arrayWithObjects 是一个方便的方法,返回一个自动释放的对象,所以去掉

        [array release];
        

        另外你这样做会泄漏内存:

        [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image1.png"]]
        

        因为这次没有释放 imageView。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-18
          • 2011-05-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多