0

我正在尝试将 UIView 传递给另一个类 - 这有点工作,但我无法保留指针......

在我的 .h 文件中,我声明了视图:

UIView *someView;

我添加属性

@property (nonatomic, retain) UIView *someView;

在 .m 文件中,我综合了属性

@synthesize someView;

然后我有一种设置视图的方法(也在 .h 文件中设置 - 相信我 :):

-(void)makeViewPointer:(UIView *)myView{
    someView = [[UIView alloc] init];
    someView = myView;

    for(UIView *aView in someView.subviews){

        NSLog(@"tag %d", aView.tag);

    }
}

到目前为止,一切正常。当我记录 someView 时,我得到一个指针并且所有子视图都可以访问。

我从另一个类调用这个方法——这似乎工作正常。

现在 - 我设置了一个 IBAction 以在单击按钮后对该视图执行某些操作

-(IBAction)doSomething:(id)sender{
    NSLog(@"show the view %@", someView);

    for(UIView *aView in someView.subviews){  // doesn't output anything

        NSLog(@"tag %d", aView.tag);

    }

}

此时,someView-var 再次为空 - 为什么????

我假设,当我使用@property(非原子,保留)时,变量会自动保留吗?

我还尝试在初始化时保留变量:

someView = [[UIView alloc] retain];

不工作

或者

someView = [[UIView alloc] init];
[someView retain];

也不行……

我到底做错了什么???

谢谢你的帮助!

4

3 回答 3

0

好的 - 我想,我做的一切都尽可能错了;)

我想我应该提到我已经在 IB 中设置了视图。在那里,我将我正在谈论的课程添加到我的父母视图中(听起来很混乱,我知道 - 但是,嘿,这是 IB :)......

目标是弹出某种覆盖视图 - 但我不想将该视图放在单独的 nib 文件中。所以,这就是我刚刚从类库中添加类的原因。

我现在终于放弃了,把覆盖移到了一个单独的笔尖,让我的班级成为一个视图控制器......一切都很好......

无论如何,感谢您的提示,伙计们-我确实学到了很多...

于 2010-06-23T00:16:57.617 回答
0

一些事情。

someView = [[UIView alloc] init];
someView = myView;

以上是错误的。首先,您要创建一个新UIView实例并将其分配给someView. 然后分配myViewsomeView. 这会导致内存泄漏,因为您从未发布过someView,只是重新分配了它。

我认为你想要做的是:

[someView release];
someView = [myView retain];

然后,您必须确保someView在完全完成后释放。

这就是@property (nonatomic, retain)意志所做的,但要使用它,你必须这样做:

[self setSomeView:myView];
于 2010-06-22T17:42:38.413 回答
0

如果不使用自点表示法,则不会保留分配给属性的对象。

你需要使用:

self.someView = myView;

for(UIView *aView in self.someView.subviews){

self 表示法调用管理保留的合成访问器方法。如果您不使用 self ,则不会正确保留任何内容。

于 2010-06-22T18:06:12.193 回答