我正在尝试将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];
也不起作用......
我到底在做什么?
感谢您的帮助!
答案 0 :(得分:0)
很少。
someView = [[UIView alloc] init];
someView = myView;
以上是错误的。首先,您要创建一个新的UIView
实例并将其分配给someView
。然后,您将myView
分配给someView
。这导致内存泄漏,因为您从未发布过someView
,只是重新分配了它。
我认为你要做的是:
[someView release];
someView = [myView retain];
然后,当你完成它时,你必须确保释放someView
。
这是@property (nonatomic, retain)
将要执行的操作,但要使用您必须执行的操作:
[self setSomeView:myView];
答案 1 :(得分:0)
如果不使用自带点表示法,则不保留分配给属性的对象。
您需要使用:
self.someView = myView;
和
for(UIView *aView in self.someView.subviews){
自表示法调用管理保留的综合访问器方法。如果您不使用self,则无法正确保留任何内容。
答案 2 :(得分:0)
好的 - 我想,我尽可能做错了一切;)
我应该提到,我想,我已经在IB中建立了观点。在那里,我把我正在谈论的课程添加到我的父母视图中(听起来令人困惑,我知道 - 但是,嘿,这是IB :) ...
目标是弹出某种覆盖视图 - 但我不想将该视图放在单独的nib文件中。所以,这就是我刚从类库中添加类的原因。
我现在终于放弃并将叠加层移动到一个单独的笔尖,使我的班级成为一个视图控制器......一切正常......
无论如何,谢谢你的提示,伙计们 - 我确实学到了很多......