iOS-以编程方式创建UIScrollView,直接分配与属性

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

从Apple中,他们在
-(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
中合成一个属性并进行清理。这两种方法都没有问题——只是取决于您需要做什么。