我有“classmap.m”,annotation.mi 在“classmap.m”中有一个坐标值,我需要在另一个类 annotation.m 中分配一个值。
例如:class1.m 双 start_long;
我想在另一个类中传递值(annotation.m)
注释.m
annotation.longitude=Start_long;
我该怎么做,请举一些例子。
提前致谢
一种更好、更高效、更有效和更清洁的方法是使用单例模式。一个好的方法是保持 AppDelegate 更干净,并避免在那里保留全局变量。始终尝试使用单例类和对象来保留全局变量。
如果 classmap.m 和 annotaion.m 都是从 NSObject 继承的,那么它就是简单的 annotation:classmap 。将允许访问类映射的属性
类映射
@interface classmap : NSObject
@property double longitude;
@end
#import "classmap.h"
@implementation classmap
@synthesize longitude;
@end
注释
@interface annotation : classmap
@property double start_long;
@end
#import "annotation.h"
@implementation annotation
@synthesize start_long;
@end
现在可以在 annotation.longitude=Start_long 您需要的地方轻松完成分配
另一种方法是使用委托。在您的 classmap.m 中声明
@protocol classmapDelegate <NSObject>
-(void)didchangeCoordinateValue:(double)longitude;
@end
annotation 应该确认这个协议,并且当 classmap 中的值发生更改时,您可以获得事件 tin Annotation 类。
该Singleton
模式是一种应该谨慎使用的武器,因为它对ClassMap
使用它的所有对象都建立了具体的依赖关系。
虽然使用 Singleton 将实现您现在想要的,即访问其中的属性,ClassMap
但您为将来的编码问题做好了准备。
例如,当您有多个ClassMap
实例时会发生什么?
单身人士更适合做通用工作的事情。作为工具的东西。例如[NSUserDefaults standardUserDefaults]
或[NSFileManager defaultManager]
另一种解决方案是使用依赖注入Annotation
,它在需要对象的对象之间创建直接连接ClassMap
。
简而言之ClassMap
,声明一个属性
@property double start_long;
ClassMap
实例化时将对象传递给对象Annotation
。
Annotation.h
@interface Annotation:NSObject
-(instancetype)initWithClassMap:(ClassMap *)amap;
@end
还有……</p>
Annotation.m
@interface Annotation() {
ClassMap *_map;
}
@end
@implementation Annotation
-(instancetype)initWithClassMap:(ClassMap *)amap {
self = [super init];
if(self) {
_map = amap;
}
return self;
}
-(void)doSomething {
self.longitude = _map.start_long;
}
@end
获取Appdelegate中的变量并在项目中的任何位置访问它。像访问它
赋值
AppDelegate *app = [[UIApplication sharedApplication]delegate];
appd.start_long = -17.002// assign some value here
读取值
AppDelegate *app = [[UIApplication sharedApplication]delegate];
double dVal = appd.start_long ;