2 mapmapm MapMapM 于 2013.03.28 10:16 提问

在objective-c中使用全局/静态变量

保存用作方法的变量,然后在另一个方法中调用。
实现时会不会用到全局/外部/静态变量?如果需要应该怎么用?

我试过用全局和静态,但是都失败了。

代码中用来保存newX 和 newY 的信息。

-(void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
...
    int newX = (int)(Button.center.x + valueX);
    int newY = (int)(Button.center.y + valueY);
...
}

然后在这里调用:

-(IBAction)clicked:(id)sender

{
    randX = arc4random() % 320;
    randY = arc4random() % 548;

    CGPoint randNewPlace = CGPointMake(randX, randY);
    Rand.center = randNewPlace;
    if (newX == randX || newY  == randY)
    {
        [Rand sendActionsForControlEvents:UIControlEventTouchUpInside];
    }
}

2个回答

h3c4lenovo
h3c4lenovo   2013.03.28 10:36
已采纳

你是做Android转iOS的么?在Objc中没有Java里全局变量的这个概念,只能够通过单例实现类似的效果。
创建一个GloubVariables对象保存需要保存的内容:

//////////////////////////////////////////////////////////////////////////
GloubVariables.h
@interface GloubVariables : NSObject
{
    int newX;
    int newY;
}

@property(assin,nonatomic) int newX;
@property(assin,nonatomic) int newY;
+(GloubVariables *)sharedInstance;

@end
//////////////////////////////////////////////////////////////////////////
GloubVariables.m
#import "GloubVariables.h"
@implementation GloubVariables
@synthesize newX;
@synthesize newY;

static GloubVariables *instance_;
+(GloubVariables *)sharedInstance
{
    @synchronized(self)
    {
        if(instance_ == nil)
        {
            instance_ = [[GloubVariables alloc] init];
        }
    }
    return instance_;
}
@end
//////////////////////////////////////////////////////////////////////////

然后需要用到的地方:

[GloubVariables sharedInstance].newX
[GloubVariables sharedInstance].newY
suannai0314
suannai0314 帮你编辑了下代码的格式,更多markdown的使用见http://ask.csdn.net/pages/markdown
接近 5 年之前 回复
gaoXxxing
gaoXxxing   2013.03.28 13:51

这样
声明属性:

@property(nonatomic,weak) int newX;
@property(nonatomic,weak) int newY;

-(void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
...
    self.newX = (int)(Button.center.x + valueX);
    self.newY = (int)(Button.center.y + valueY);
...

}

-(IBAction)clicked:(id)sender

{
   randX = arc4random() % 320;
   randY = arc4random() % 548;

   CGPoint randNewPlace = CGPointMake(randX, randY);
   Rand.center = randNewPlace;

   if (self.newX == randX || self.newY  == randY)
   {
      [Rand sendActionsForControlEvents:UIControlEventTouchUpInside];
   }

}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!