如何在Objective-C中生成和访问全局变量

如何在Objective-C中生成和访问全局变量,objective-c,global-variables,coordinates,Objective C,Global Variables,Coordinates,我通过一个搜索栏在地图上放了一个大头针,我检索了它的坐标,并将它们保存在我的纬度和我的长度的两倍中。 这在以下代码片段中完成: 类别1.h @interface Location : UIViewController <UISearchBarDelegate, MKMapViewDelegate> @property (nonatomic, readwrite) double myLatitude; @property (nonatomic, readwrite) double m

我通过一个搜索栏在地图上放了一个大头针,我检索了它的坐标,并将它们保存在我的纬度和我的长度的两倍中。 这在以下代码片段中完成:

类别1.h

@interface Location : UIViewController <UISearchBarDelegate, MKMapViewDelegate>

@property (nonatomic, readwrite) double myLatitude;
@property (nonatomic, readwrite) double myLongitude;

现在,我想在另一个2类中使用这两个双精度(myLatitude和myLongitude),换句话说,我需要这两个双精度是全局的,我想,我怎样才能使它们全局化,然后如何在2类中调用它们?任何代码都将不胜感激

最简单的方法可能是使用

您可以创建一个新的singleton类,然后从应用程序中的任何位置访问该类。因此,您可以创建
CoordinateManager
或其他东西,然后使用它来处理您希望全局的位置坐标

例如。
CoordinateManager.h

@interface CoordinateManager : NSObject

+ (CoordinateManager *)sharedManager;

@property float latitiude;
@property float longitude;

@end
CoordinateManager.m

@implementation CoordinateManager

@synthesize latitiude;
@synthesize longitude;

static CoordinateManager *manager = nil;

+ (CoordinateManager *)sharedManager
{
    if (manager) {
        return manager;
    }
    else {
        @synchronized(self) {
            if (!manager) {
                manager = [[CoordinateManager alloc] init];
            }
            return manager;
        }
    }
}

@end
然后将属性设置为:

[[CoordinateManager sharedManager]设置纬度:1.067594]


然后,只要您导入
CoordinateManager.h

好的,就可以从应用程序中的任何位置访问它,所以我已经设置了[[CoordinateManager sharedManager]SetLatitude:newLocation.latitude];在我的搜索栏方法中。我如何从其他地方访问它?不要为此用例创建单例。只需将
Location
对象的一个实例传递给
class2
@rmaddy,这就是我最初尝试的,我在所有方法之外定义了坐标,以便访问它们,然后创建了一个Location*object=[Location alloc];在第二节课上,但是object.latitude不会给我任何回报,这就是问题所在。不要在第二类中创建
位置
对象。创建获取坐标的
位置
对象,然后将特定的
位置
对象传递给第二类。@rmaddy使用单例作为全局“存储”,然后在应用程序中的任何位置使用它,而不是传递变量,这难道不容易吗?在开发应用程序时,您可以向singleton添加有用的功能@dave您将
#在class2中导入“CoordinateManager.h”
,然后调用
float lat=[[CoordinateManager sharedManager]latitude]
@implementation CoordinateManager

@synthesize latitiude;
@synthesize longitude;

static CoordinateManager *manager = nil;

+ (CoordinateManager *)sharedManager
{
    if (manager) {
        return manager;
    }
    else {
        @synchronized(self) {
            if (!manager) {
                manager = [[CoordinateManager alloc] init];
            }
            return manager;
        }
    }
}

@end