0

大家好,对不起,我的英语不好。

我有下一个问题:添加视图哪个更好(我的问题是关于内存成本和更好的编程方法)

像这样:

UIViewController *vcToAdd = [[UIViewController alloc]
                             initWithNibName:@"vcxib"
                             bundle:[NSBundle mainBundle]];

[self.view addSubview:vcToAdd.view];

或者像这样:

NSArray *xibsArray = [[NSBundle mainBundle]
                      loadNibNamed:@"MMList_iPhone" owner:nil options:nil];

UIView *vwToAdd = [xibsArray objectAtIndex:0];
[self.view addSubview:vwToAdd];
4

1 回答 1

1

在第一种情况下,您拥有自己创建的 UIViewController,这意味着您有责任释放它。如果您不释放它,则可能会在某个地方泄漏。

UIViewController *vcToAdd = [[UIViewController alloc] initWithNibName:@"vcxib" bundle:[NSBundle mainBundle]];
[self.view addSubview:vcToAdd.view];
[vcToAdd release];

在第二种情况下,您不拥有 Nib 文件的内容。所以你不负责管理内存。无论如何,在这里您将获取 Nib 文件的内容并“按原样”呈现它。没有控制其行为的 UIViewController。

如果您的 Nib 文件中包含的视图需要一些复杂的管理,例如动画或触摸,UIViewController 方式可能是您正在寻找的......

在此处此处查看 Apple 的内存管理指南(英文)。

编辑:还有第三种方法......以编程方式创建视图而不使用 Nib 文件。

// Create your content view
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 480.0f)];
// Add objects to it
UIButton *button = [UIButton ...
UILabel *label = [UILabel ...
[view addSubview:button];
[view addSubview:label];
...
// Put your content view on screen
[self.view addSubview:view];
// Free memory
[view release];
于 2012-04-12T22:30:01.833 回答