我正在爲聊天應用程序使用AsyncSocket類。但我想在整個項目的Login頁面中使用創建的AsyncSocket實例。這意味着我想重用在ChatViewControl類的Login頁面中創建的AsyncSocket實例。 任何人都可以幫助我找到解決方案嗎?如何將AsyncSocket實例聲明爲全局
0
A
回答
-1
你應該儘可能避免全局狀態(參見Sven的鏈接)。一般來說,你可能更喜歡將某種對象傳遞給其他對象。
例如,我正在處理的當前應用程序我有一個ServerInfo對象,我在創建它之前創建並傳遞給每個新視圖控制器,並且它包含套接字,加密信息,當前消息ID ,用戶名等
然而,要回答如何聲明它作爲一個全球性的問題,你可以做到這一點,就像在C:
在login.h:
extern AsyncSocket *g_socket;
在login.m:
AsyncSocket *g_socket;
那麼當您創建套接字:
g_socket = [[AsyncSocket alloc] init];
,當你想用它在其他文件中:
#import "login.h"
...
[g_socket sendData:...];
2
如果你想有一個應用程序範圍內參照單AsyncSocket
,你可以考慮宣佈它爲你的application delegate的財產。你可以做到這一點大意如下:
// SampleAppDelegate.h
#import <Foundation/Foundation.h>
@class AsyncSocket;
@interface SampleAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
AsyncSocket *socket;
}
@property (nonatomic,retain) AsyncSocket *socket;
// SampleAppDelegate.m
#import <SampleAppDelegate.h>
#import <AsyncSocket.h>
@implementation SampleAppDelegate
@synthesize socket;
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
[window addSubview:[splitViewController view]];
[window makeKeyAndVisible];
self.socket = [[AsyncSocket alloc] init]; // I can't remember this off the top of my head!
}
從你這點可以通過簡單地做訪問您的插座:
AsyncSocket *socket = [UIApplication sharedApplication] delegate] socket];
+0
通過將套接字放在AppDelegate中嘗試了您的建議,但是當我嘗試從其他視圖控制器訪問時,套接字方法調用不出來 - > [UIApplication sharedApplication]委託]。我正在使用CocoaAsyncSocket:https://github.com/robbiehanson/CocoaAsyncSocket任何想法? – Eddy 2012-08-28 01:44:33
相關問題
- 1. 如何將變量聲明爲全局?與案例foreach? Javascript
- 2. PHP全局聲明
- 3. 如何在PHP中將數組聲明爲全局數組?
- 4. 如何將變量聲明爲全局變量?
- 5. 如何將AVAudioRecorder聲明爲全局變量
- 6. 如何使用C++將函數聲明爲全局函數?
- 7. 如何將驅動程序聲明爲全局?
- 8. 如何將textbox聲明爲全局變量?
- 9. 聲明全局perl子例程或全局別名
- 10. RankNTypes爲實例聲明?
- 11. 將通用聲明變量聲明爲全局是否有任何好處?
- 12. 如何在Swift中全局聲明uisearchController
- 13. Drools:如何聲明和分配全局
- 14. 如何聲明python全局列表
- 15. JavaScript;我如何聲明變量全局?
- 16. 如何聲明全局變量?
- 17. 如何聲明全局變量
- 18. 如何在Swift中全局聲明SKSpriteNode
- 19. 如何全局聲明一個數組
- 20. 如何在cython中聲明全局numpy.ndarray?
- 21. 如何正確聲明全局變量?
- 22. 如何在swift中全局聲明UIView?
- 23. 如何在全局數組聲明中聲明sysconf返回值?
- 24. 是否有可能將已在類中聲明的實例全局化?
- 25. 如何在C#中將類實例聲明爲常量?
- 26. Java - 如何將table [i] [j]元素聲明爲實例變量?
- 27. 鎖是否需要聲明爲全局?
- 28. 聲明全局表格
- 29. C++全局對象聲明
- 30. 已聲明全局屬性
你真的應該避免全局狀態。只需將'AsyncSocket'實例傳遞給需要它的其他對象。閱讀依賴注入:http://en.wikipedia.org/wiki/Dependency_injection – Sven 2010-09-21 14:15:54