Iphone 为什么可以';我不能保留UIView指针吗?

Iphone 为什么可以';我不能保留UIView指针吗?,iphone,uiview,retain,Iphone,Uiview,Retain,我正在尝试将UIView传递给另一个类-这有点可行,但我无法保留指针 在我的.h文件中,我声明视图: UIView *someView; 我添加属性 @property (nonatomic, retain) UIView *someView; @synthesize someView; 在.m文件中,我合成了这个属性 @property (nonatomic, retain) UIView *someView; @synthesize someView; 然后我有了一个设置视图的方法

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

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

UIView *someView;
我添加属性

@property (nonatomic, retain) UIView *someView;
@synthesize someView;
在.m文件中,我合成了这个属性

@property (nonatomic, retain) UIView *someView;
@synthesize someView;
然后我有了一个设置视图的方法(也在.h文件中设置了-相信我:):

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

我从另一个类调用这个方法-它似乎工作得很好

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

-(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变量再次为空-为什么

我假设,当我使用@property(nonatomic,retain)时,变量会自动保留吗

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

someView = [[UIView alloc] retain];
不起作用

也不起作用

我到底做错了什么

谢谢你的帮助

没什么

someView = [[UIView alloc] init];
someView = myView;
以上是错误的。首先,创建一个新的
UIView
实例,并将其分配给
someView
。然后将
myView
分配给
someView
。这会导致内存泄漏,因为您从未释放过
someView
,只是重新分配了它

我想你要做的是:

[someView release];
someView = [myView retain];
然后,您必须确保在完全完成后发布
someView

这就是
@属性(非原子,保留)
将要做的,但要使用它,您必须执行以下操作:

[self setSomeView:myView];

如果不使用自点表示法,则不会保留指定给特性的对象

您需要使用:

self.someView = myView;


self表示法调用管理保留的综合访问器方法。如果你不使用self,任何东西都不会被正确保留

好吧——我想,我做的每件事都尽可能地做错了;)

我想我应该提到的是,我已经在IB中设置了视图。在那里,我将我正在谈论的类添加到了我的父视图中(听起来很困惑,我知道-但是,嘿,它是IB:)

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

我现在终于放弃了,将覆盖移动到一个单独的nib,使我的类成为一个视图控制器和。。。一切正常


无论如何,谢谢你们的提示,伙计们-我确实学到了一些东西…

谢谢汤姆-这确实有道理。。。但是-它不起作用。。。我使用:-(void)makeViewPointer:(UIView*)myView{[self-setSomeView:myView];}但是在下一次调用«someView»时,它又是空的???Damnar你确定课程被保留了吗?谢谢TechZen。。。试过了-但没用。。。我忘了说我已经试过自点符号了。。。这很奇怪…你可以试着发布你的实际代码。这可能是某个地方的细节问题。你想做的事没有理由不起作用。
for(UIView *aView in self.someView.subviews){