我想用它的方法在objective-c中创建一个类,这样为了访问数据我不想实例化这个类。我该怎么做?没有初始化的访问类
回答
你可以使用单身模式,检查这个question。
像这样:
+(MySingleton *)sharedInstance {
static dispatch_once_t pred;
static MySingleton *shared = nil;
dispatch_once(&pred, ^{
shared = [[MySingleton alloc] init];
shared.someIvar = @"blah";
});
return shared;
}
或者,如果你想只接入方式,你可以使用工厂方法(那些+,不 - )
@interface MyClass
@property (nonatomic, assign) NSInteger value;
+ (void) factoryMethod;
- (void) instanceMethod;
...
// then in code
[MyClass factoryMethod]; // ok
[[MyClass sharedInstance] instanceMethod]; // ok
[MyClass sharedInstance].value = 5; // ok
UPDATE:
您可以添加属性到appDelegate
// in your app delegate.h
@property (nonatomic, retain) UIViewController* view;
// in your app delegate.m
@synthesize view;
,并从像几乎任何地方得到appDelegate
:
myapp_AppDelegate* appDelegate = [[UIApplication sharedApplicaton] delegate];
appDelegate.view = ...; // set that property and use it anywhere like this
注意,那你需要#import
您的UIViewController子类和你appDelegate.h
进行自动完成工作,有时避免警告。
// someFile.m
#import "appDelegate.h"
#import "myViewController.h"
...
myapp_AppDelegate* appDelegate = [[UIApplication sharedApplicaton] delegate];
appDelegate.view.myLabel.text = @"label text";
我已经写了我的课并且已经分配了,但是我只能在分配它的地方使用它...有没有办法将它用于全局变量?就像我在.h中写入一样.h –
UIViewController * view; –
无论如何,你需要以某种方式存储它的指针。也许你可以添加一个属性到你的AppDelegate或者创建一个单例类(就像在我的答案中一样)并在那里添加那个指针。 –
要么你可以使用singleton
,或者如果您打算只使用静态方法,你可以将其添加在课堂上,并直接与类名使用它。
创建方法为静态,
+(void)method;
然后用它作为,
[MyClass method];
,这是很有帮助仅当您创建它只有像处理图像或一些实用方法的一些工具类所以。如果你需要有属性变量,你将需要singleton
。
对于如: -
转到新的文件,并创建MySingleton
类,这将创造MySingleton.h
和MySingleton.m
文件。
在.h文件中,
@interface MySingleton : NSObject
{
UIViewController *myview;
}
@property (nonatomic, retain) UIViewController *myview;
+(MySingleton *)sharedSingleton;
在.m文件,
+ (MySingleton*)sharedSingleton {
static MySingleton* _one = nil;
@synchronized(self) {
if(_one == nil) {
_one = [[ MySingleton alloc ] init ];
}
}
return _one;
}
- (UIViewController *)myview {
if (!myview) {
self.myview = [[[UIViewController alloc] init] autorelease]; //you can skip this, but in that case you need to allocate and initialize the first time you are using this.
}
return myview;
}
然后把它作为,
[[MySingleton sharedSingleton] myview]
项目中的任何地方。请记得导入MySingleton.h
。同样,你可以在单例中创建任何对象并使用它。只需相应地实现getter或setter方法即可。
有一件事你必须要小心的是,在单例中创建的对象只有一个内存空间分配,因此它是同一个对象,每当你在你的项目中的任何地方使用。以上代码不会在课程中创建myview
对象的多个副本。所以无论何时你修改一个将被反射到处的属性myview
。只有在绝对需要时才使用此方法,并且您需要从整个项目中访问单个对象。通常我们只用于存储sessionID等需要从不同类访问的情况。
如何从这种实现中访问textview? –
我已经更新了我的答案并回答了这个问题。此外,为什么你想像这样使用textview而不是创建为局部变量?任何特定的原因? – iDev
- 1. 类没有初始化器?
- 2. 类没有初始化
- 3. 使用Singleton类初始化/访问ArrayList
- 4. 在C#中没有()的类初始化
- 5. 的TextView没有初始化
- 6. 类AppDelegate没有初始化器
- 7. 类'ProductDetailViewController'没有初始化器
- 8. 类ChecklistViewController没有初始化程序?
- 9. 类'ViewController'没有初始化器
- 10. 子类UIButton似乎没有初始化
- 11. 无法初始化代理 - 没有会话,访问的过滤器类
- 12. 斯威夫特泛型:没有访问初始化
- 13. dpHibernate:serializerFactory没有被Spring初始化 - > NullPointerException在服务访问
- 14. 类初始化问题
- 15. ObjectInputStream没有初始化
- 16. 结果没有初始化?
- 17. 属性没有初始化
- 18. Accumulo没有被初始化。
- 19. skrollr.min.js没有初始化
- 20. JqGrid没有初始化
- 21. 从子类访问外部初始化父类的属性
- 22. 初始化和访问NSDictionary的内容
- 23. 数据访问的惰性初始化
- 24. AngularJS在初始化DOM上的访问
- 25. 初始化类具有{0}
- 26. 初始化类
- 27. 类初始化
- 28. 类初始化
- 29. 初始化类
- 30. 初始化内置类型初始化
如何从另一个类调用它? –