1

嗨,我有一个小问题。我的程序不记得通过单击第一个按钮生成的随机值。但我想在另一个按钮中使用该值,这就是问题所在。如果我尝试返回那个值,程序会说这个方法不应该返回值。这是我的代码的样子:

int randomprocess;
- (IBAction)button:(id)sender {
randomprocess = rand() % 3;
// Do something    }
- (IBAction)b1:(id)sender {
if (randomprocess == 0) {
    // Do something
} else {
    // Do something else
}

如果我不写第一行,第二个按钮将无法识别“randomprocess”。现在,当我声明它时,它仍然为零或我将其设置为相等的任何数字。

4

2 回答 2

2

可能,您已经声明了一个同名的 iVar / 属性,它涵盖了您的全局变量。仅使用全局变量iVar。

方法或对象头之外的声明int randomprocess;使其成为“普通”全局 C 变量。

iVar 是与您的对象相关的局部变量。属性(通常)是具有某些访问器的 iVar。如果您同时声明了全局变量和局部变量(resp,iVar),则全局变量不可见,但被局部变量覆盖。

一般来说,使用全局变量是个坏主意。如果必须,请将其设为静态。更好的是使用 iVar。

编辑 要创建一个属性,您的标题应如下所示:

@interface myclass
@property (nonatomic,assign) int randomprocess;
// ...
@end

对于实施:

@implementation myclass
@synthesize randomprocess; // only for XCode < 4.4 needed
// ...

- (IBAction)button:(id)sender {
   self.randomprocess = rand() % 3;
 // Do something    
 }
- (IBAction)b1:(id)sender {
   if (self.randomprocess == 0) {
    // Do something
   } else {
    // Do something else
   }
 //
 } 
于 2012-09-13T06:58:25.230 回答
1

或者你应该像这样声明你的变量

@interface myclass {
 int randomprocess;
}

在 .h 文件中或:

@implementation myclass {
 int randomprocess;
}

在 .m 文件中

这将声明没有属性的内部变量(iVar)

如果您将在 .m 文件(第二个示例)中执行此操作,则此变量将仅在当前文件中可用

If you will do this inside .h file (1st sample) this variable will be available for current .m and in subclasses as well

于 2012-09-13T20:53:10.080 回答