如果我在代码中创建一个对象,我可以稍后再参考它来进行更改吗?

时间:2013-02-26 17:54:50

标签: iphone ios objective-c ipad

我希望在代码中而不是在界面构建器中构建我的新应用程序,因为它将涉及制作多个重复的视图。我希望能够回到我正在制作的许多物品,以便以后与它们互动。

是否需要在我的.h文件中创建所有这些对象,然后在我的.m中设置,或者我可以仅在需要时构建它们吗?如果我只是在需要时创建对象,那对内存会不会更好?

例如,我可以在一个方法中创建一个UIView:

-(void)makeViewOne {
UIView *viewOne = [[UIView alloc] init];
viewOne.frame = CGRectMake(0,0,50,50);
viewOne.backgroundColor = [UIColor whiteColor];
[mainView addSubview:viewOne];
}

-(void)changeViewOneBackgroundColor {
viewOne.backgroundColor = [UIColor grayColor];
}

但是在第二种方法中,我怎样才能回顾这个视图?我还想构建和回顾诸如UITextFields,UILabels,UIButtons等内容。

谢谢!

1 个答案:

答案 0 :(得分:1)

有各种方法可以实现这一点,这里只是我通常使用的其中一种方法:

注意:此示例使用内部属性来保存对视图的引用。在您的评论中, HotLicks tom 提到了这方面的关键教训,您可以使用ivars和属性(以及其他内容):

MyViewController.m

@interface MyViewController()
@property (nonatomic, retain) UIView *viewOne;
@end

@implementation MyViewController
@synthesize viewOne;
...
...
-(void)makeViewOne 
{
    self.viewOne = [[[UIView alloc] init] autorelease];
    self.viewOne.frame = CGRectMake(0,0,50,50);
    self.viewOne.backgroundColor = [UIColor whiteColor];
    [mainView addSubview:self.viewOne];
}
-(void)changeViewOneBackgroundColor 
{
    self.viewOne.backgroundColor = [UIColor grayColor];
}
/*
 Bonus!
*/
-(void)removeViewOne 
{
    [self.viewOne removeFromSuperview];
}
...
...
@end

修改

要清楚,重点是在某处保存对视图的引用。在评论中,您提到您可能有多个对象,或者可能不会视您的情况而定。这不会改变任何事情;但是,您可以考虑将您的视图存储在一个集合中,HotLicks再次指出。但是,要做到这一点,您还需要在某处存储对您的集合的引用,以获取其内容。因此,使用我的示例,您可以决定创建类型为NSMutableDictionaryNSMutableArray的属性,或其他各种类型的属性,然后添加您希望在其中创建的任何视图。使用NSMutableDictionary可能对您更有用,因为您可以使用密钥将视图存储在其中,然后使用密钥返回这些视图。

假设您引用mainView,另一种可能性是设置每个视图的标记属性或某些自定义属性。然后,您可以枚举mainView.subviews以获取您要查找的视图,以便对其进行更改。