使用字符串的值来确定类的实例

Ron*_*ear 3 iphone xcode objective-c

我有一个类似于这个的switch语句:

    switch (number)
    {
        case 1:
            if (imageView1.hidden == NO)
            {
                imageView1.hidden = YES;                    

            } else 
            {
                imageView1.hidden = NO;
            }


            break;
        case 2:
            if (imageView2.hidden == NO)
            {
                imageView2.hidden = YES;


            } else 
            {
                imageView2.hidden = NO;
                            }

            break;
Run Code Online (Sandbox Code Playgroud)

等等等等.

我的问题是如何使用值为"imageView1"的字符串并使用它来访问我的imageView类的实例,而不是为每个imageView实例设置不同的大小写?我知道它类似于从字符串或类似的东西创建NSPath,但我只是不确定在哪里看或者它将被称为什么.

在此先感谢您的帮助!

Rob*_*ier 5

如果这实际上是代码,我不同意那些关心设计的人.但是,我会假设您只发布了问题的通用版本.由于这是Objective-C中的一个重要概念,因此我们应该讨论它.

您可以使用键值编码和例程按名称访问对象的属性-valueWithKey:.

NSString *nameOfView = @"imageView1";
[[self valueForKey:nameOfView] setHidden:YES];
Run Code Online (Sandbox Code Playgroud)

这将按顺序查找一个名为-imageView1ivar 的方法,imageView1最后命名为ivar _imageView1.这种技术在Cocoa中被大量使用,并且很难理解.这是我们仔细命名的众多原因之一,也是我们为我们提供处理内存管理的访问器的另一个原因.在文档中搜索"Key-Value Compliance"以获取更多信息.

现在针对这个具体案例,我倾向于使用更多类似JimG的解决方案,使用NSArray视图,因此我可以循环遍历它们并根据它们的索引打开或关闭我想要的那些.但我可以想象很多不合适的情况,而KVC可能会这样.