我想用它的方法在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. 初始化內置類型初始化
如何從另一個類調用它? –