如何为iOS应用程序进行内存管理?

时间:2013-02-09 12:18:20

标签: ios xcode cocoa-touch memory

我使用storyboard和ARC模式。这包括三个视图控制器 每个视图控制器都有自己的类。

VC1有Class1.h和Class1.m
VC2有Class2.h和Class2.m。

在每个m文件中,我创建图像视图并将图像添加到图像视图中 然后我将此图像视图添加到滚动视图中。

在这种情况下,在class1中使用大约200张图像后,class2的图像无法在图像视图中显示。

起初,我认为这是记忆问题 我认为它达到内存限制,因此无法再次添加其他图像。

因此,我减少图像尺寸并再试一次(从300Mb减少到30Mb) 但是,它没有用。我不知道。 我怎么解决这个问题?请告诉我方法。

这是我的代码。

- (void)viewDidLoad
{

[super loadView];
self.view.backgroundColor = [UIColor grayColor];

UIScrollView *ScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 44, self.view.frame.size.width, self.view.frame.size.height)];
ScrollView.pagingEnabled = YES;

NSInteger numberOfViews = 200;
for (int i = 0; i < numberOfViews; i++) {
    CGFloat xOrigin = i * self.view.frame.size.width;

    // Create a UIImage to hold Info.png
    UIImage *image1 = [UIImage imageNamed:@"Image-001.jpg"];
    UIImage *image2 = [UIImage imageNamed:@"Image-002.jpg"];

    UIImage *image13 = [UIImage imageNamed:@"Image-200.jpg"];

    NSArray *images = [[NSArray alloc] initWithObjects:image1,image2,...,image200,nil];

    UIImageView *ImageView = [[UIImageView alloc] initWithFrame:CGRectMake(xOrigin, 0, self.view.frame.size.width, self.view.frame.size.height-44)];
    [ImageView setImage:[images objectAtIndex:i]];

    [ScrollView addSubview:ImageView];
}
ScrollView.contentSize = CGSizeMake(self.view.frame.size.width * numberOfViews, self.view.frame.size.height);

[self.view addSubview:ScrollView];

}

3 个答案:

答案 0 :(得分:1)

  1. 检查您是否要将图像视图添加到scrollview或self.view

  2. 检查滚动视图框架或scrollview内容大小。要向UIScrollView制作n个图像,你可以这样做

  3. 在for循环外声明并添加数组对象,这样会占用编译时间。

  4.   

    UIScrollView * scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0,0,self.view.size.width,self.view.size.height)]; [self.view addsubView:scroll];

         

    float xaxis = 10;

         

    for(int i = 0; i&lt; 20; i ++)   {   UIImageView * imageview = [[UIimageView alloc] initWithFrame:CGRectMake(xaxis,0,150,150)]];   [imageview setImage:[UIImage imagenamed:@“”]]; //如果你想要多个图像,你可以从数组调用   [scroll addSubview:imageview]; xaxis = xaxis * i + 50; // apprx}

         

    scroll.contentsize = CGSizemake(x-轴+ 30,self.view.size.height);

答案 1 :(得分:0)

为每张图片创建单独的UIImageView(尺寸合适),并将所有UIImageView添加到UIScrollView,并提供contentSize UIScrollView的正确{。}}。

获取变量int x;并在 .h文件中声明它 并在x=0;方法

中指定viewDidLoad

然后给出适当的UIImageView框架

- (void)viewDidLoad
{

[super viewDidLoad];
self.view.backgroundColor = [UIColor grayColor];

x=0;

UIScrollView *ScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 44, self.view.frame.size.width, self.view.frame.size.height)];
ScrollView.pagingEnabled = YES;

NSInteger numberOfViews = 200;
for (int i = 0; i < numberOfViews; i++) {
    CGFloat xOrigin = i * self.view.frame.size.width;

    // Create a UIImage to hold Info.png
    UIImage *image1 = [UIImage imageNamed:@"Image-001.jpg"];
    UIImage *image2 = [UIImage imageNamed:@"Image-002.jpg"];

    UIImage *image13 = [UIImage imageNamed:@"Image-200.jpg"];

    NSArray *images = [[NSArray alloc] initWithObjects:image1,image2,...,image200,nil];

    UIImageView *ImageView = [[UIImageView alloc] initWithFrame:CGRectMake(xOrigin, 0, self.view.frame.size.width, self.view.frame.size.height-44)];
    [ImageView setImage:[images objectAtIndex:i]];

    [ScrollView addSubview:ImageView];

    x= x + imageView.frame.size.width;

}
ScrollView.contentSize = CGSizeMake(imageView.frame.size.width * numberOfViews, self.view.frame.size.height);

[self.view addSubview:ScrollView];

}

答案 2 :(得分:0)

为什么要初始化imageArray 200次?

为什么以下部分位于for循环::

// Create a UIImage to hold Info.png
UIImage *image1 = [UIImage imageNamed:@"Image-001.jpg"];
UIImage *image2 = [UIImage imageNamed:@"Image-002.jpg"];

UIImage *image13 = [UIImage imageNamed:@"Image-200.jpg"];

NSArray *images = [[NSArray alloc] initWithObjects:image1,image2,...,image200,nil];

您需要在for循环开始之前初始化 images 数组一次,然后遍历这些图像以添加到scrollview