代码之家  ›  专栏  ›  技术社区  ›  Laurence Wingo

在Objective-C中,为什么编译器关心两个完全不同的视图控制器类中同名的变量?

  •  -1
  • Laurence Wingo  · 技术社区  · 6 年前

    我注意到当我试图在不同的视图控制器中使用相同的变量名时,编译器会抱怨,不会编译。为什么编译器关心两个完全不同的视图控制器中同名的变量?让我想到这个问题的是,我想把数据从视图控制器A传递到视图控制器B,以避免在我的应用程序中进行第二次网络调用。

    视图控制器A:

    #import "UIKit.h"
    
    @interface MenuController ()<UITableViewDataSource ,UITableViewDelegate>
    
    
    @end
    
    @implementation MenuController
    
    NSString *userFirstNameString;
    NSString *userLastNameString;
    
    @end
    

    视图控制器B:

    #import "UIKit.h"
    
    @interface MenuControllerB ()<UITableViewDataSource ,UITableViewDelegate>
    
    
    @end
    
    @implementation MenuControllerB
    
    NSString *userFirstNameString;
    NSString *userLastNameString;
    
    @end
    

    错误截图: enter image description here

    1 回复  |  直到 6 年前
        1
  •  1
  •   matt    6 年前

    只是知道C的问题。目标C就是C。

    考虑那些NSString声明的状态(范围)。它们不是实例属性。他们不是本地人。你认为他们是什么。。。?

    这是正确的。他们是 全局变量 . 所以只有一个名称空间,现在有了冲突的全局声明。

    为了防止这种情况,声明字符串 static . 那正是 静止的 在文件级别:它防止声明泄漏到全局命名空间中。