2014-02-25 145 views
0

所以我有以下initialize方法:使用变量初始化等功能

+(void)initialize 
{ 
    static BOOL init = NO 
    if init == NO 
     { 
      NSDictionary *dict = @{NSFontAttributeName......}; 
      init = YES; 
     } 
} 

现在,我有一个方法说 - drawer这需要dict

-(void) drawer:(CGRect)rect 
{ 
    [self.string drawInRect:CGRect........... withAttributes:dict]; 
} 

当我请致电dictdrawer,Xcode说 - “使用未声明的标识符dict。为什么会发生这种情况?有人可以帮助我吗?如何获得此方法以访问dict

+0

'init'变量有什么意义? 'initialize'每个类只调用一次。 – rmaddy

+1

@rmaddy:之前我实际上已经用自己的假设灼伤了自己。如果你的类涉及键值观察,'+ initialize'实际上可以被调用两次:一次在你的类中(例如'VSGame'),第二次在私有KVO类('NSKVONotifying_VSGame')中调用。所以,根据你在这种方法中做什么,你可能需要采取那种预防措施...... – NSGod

回答

2

如您所知,dict+(void)initialize是该函数的局部变量。因此,在-(void)drawer:中,您不能访问dict,因为它不在同一范围内。

如果要将dict用作任何可以访问的全局变量,请将其声明为超出函数范围。

+0

最好用'static'而不是全局来声明它是一个文件范围的变量。 –

+0

@JoshCaswell是的。这是我最喜欢避免符号冲突的方法。 –

+0

是啊... derp!非常感谢。 –