iOS-以编程方式创建UIScrollView,直接分配与属性
从Apple中,他们在iOS-以编程方式创建UIScrollView,直接分配与属性,ios,properties,uiscrollview,instance-variables,Ios,Properties,Uiscrollview,Instance Variables,从Apple中,他们在-(void)loadView中创建了一个UIScrollView,如下所示: - (void)loadView { CGRect fullScreenRect=[[UIScreen mainScreen] applicationFrame]; scrollView=[[UIScrollView alloc] initWithFrame:fullScreenRect]; scrollView.contentSize=CGSizeMake(320,75
-(void)loadView
中创建了一个UIScrollView,如下所示:
- (void)loadView {
CGRect fullScreenRect=[[UIScreen mainScreen] applicationFrame];
scrollView=[[UIScrollView alloc] initWithFrame:fullScreenRect];
scrollView.contentSize=CGSizeMake(320,758);
// do any further configuration to the scroll view
// add a view, or views, as a subview of the scroll view.
// release scrollView as self.view retains it
self.view=scrollView;
[scrollView release];
}
所以我想当然地认为scrollView变量是在.h文件中声明的一个实例变量?为什么他们用直接赋值设置scrollView
var?您是否应该使用适当的内存管理(如对合成属性)
我想知道的原因是因为我自己正在-(void)loadView
中创建一个UIScrollView
。我声明了一个UIScrollView属性,以通过类获取ScrollView的句柄。现在看起来是这样(并且正在工作),但我想知道我的代码是否正确,我不喜欢直接分配调用:
- (void)loadView {
// Setup Scroll View
// scrollView is a property setup as (nonatomic, retain) UIScrollView *scrollView;
// Wouldn't it be better if used self.ScrollView instead?
scrollView = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
[scrollView setContentSize:CGSizeMake(1, 1)];
[scrollView setDelaysContentTouches:NO];
self.view = scrollView;
}
但是,内存是在这里管理的--
scrollView
不需要保留,因为它是由self.view
保留的
如果需要保留对
scrollView
的引用,则需要保留/释放它。然而,如果你的目的不需要保留一个参考资料,只需将其分配给self.view
,释放它,然后继续你的生活 但是,内存是在这里管理的--scrollView
不需要保留,因为它是由self.view
保留的
如果需要保留对
scrollView
的引用,则需要保留/释放它。然而,如果你的目的不需要保留一个参考资料,只需将其分配给self.view
,释放它,然后继续你的生活 通常,我喜欢保留IVAR,直到调用-dealloc
为止。在这种情况下,这两种方法都可以工作,因为视图
属性保留分配给它的对象。如何使用对滚动视图
的直接分配调用?在这种情况下,我将执行类似于self.scrollView=…
的操作,然后在-loadView
方法的末尾释放它。然后,在-dealoc
中,写入self.scrollView=nil
以释放它。我要指出的是,这相当于直接赋值,就像您已经在做的那样,然后在方法末尾不释放它,只在-dealoc
中释放它。因此,您可以说在-(void)loadView
中直接赋值给实例变量是“好的”。但在大多数其他情况下,您更愿意通过属性或自己制作的setter对实例变量进行赋值?通常,我喜欢保留ivar,直到调用-dealoc
。在这种情况下,这两种方法都可以工作,因为视图
属性保留分配给它的对象。如何使用对滚动视图
的直接分配调用?在这种情况下,我将执行类似于self.scrollView=…
的操作,然后在-loadView
方法的末尾释放它。然后,在-dealoc
中,写入self.scrollView=nil
以释放它。我要指出的是,这相当于直接赋值,就像您已经在做的那样,然后在方法末尾不释放它,只在-dealoc
中释放它。因此,您可以说在-(void)loadView
中直接赋值给实例变量是“好的”。但在大多数其他情况下,您更愿意通过属性或自制的setter对实例变量进行赋值?使用对滚动视图的直接赋值调用如何?我不确定直接赋值会给您带来什么麻烦。你正在这里alloc/init
ing和release
ing。内存管理完成!同样,如果您需要保留一个引用,当然,可以在-(void)dealloc
中合成一个属性并进行清理。这两种方法都没有问题——只是取决于您需要做什么。使用对滚动视图的直接赋值调用如何?我不确定直接赋值会给您带来什么麻烦。你正在这里alloc/init
ing和release
ing。内存管理完成!同样,如果您需要保留一个引用,当然,可以在-(void)dealloc
中合成一个属性并进行清理。这两种方法都没有问题——只是取决于您需要做什么。