不同类中具有相同名称的实例变量导致编译错误

时间:2016-08-05 23:55:39

标签: objective-c

我有两个objc .m类,我们将它们称为controller1.m和controller2.m。在controller1.m和controller2.m中我都有UIAlertController的实例,如下所示:

  

controller1.m

left = -canvas.clientHeight / 2, right = canvas.clientWidth / 2, top = -canvas.clientHeight / 2, bottom = canvas.clientHeight / 2
  

controller2.m

@implementation controller1
    UIAlertController *alertController;
//more code
@end

当我尝试构建项目时,我收到错误

  

链接器命令失败,退出代码为1(使用-v查看调用)

错误日志看起来像这样

@implementaion controller2
    UIAlertController *alertController;
//more code
@end

我现在更改了实例变量的名称并且它有效...为什么我必须这样做? Xcode是否意识到这些变量以相同的方式使用(由于它们的名称),并且我应该以某种方式将它们全局声明?

2 个答案:

答案 0 :(得分:4)

您的问题是这些变量不是实例变量。它们是全局变量。

要使它们成为实例变量,它们需要位于@implementation块的花括号中,如下所示:

@implementation controller1 {
    UIAlertController *alertController;
}

//more code

@end

答案 1 :(得分:1)

如您所知,代码在每个模块中声明一个具有相同名称的全局。要使指针专用于各自的类,请使用属性...

// controller1.m

@interface controller1 ()

@property(strong,nonatomic) UIAlertController *alertController;
// any other property private to controller1

@end

@implementation controller1

// only methods here

@end