开发者

Need to retain a CFSocketRef?

I am facing a problem: I have two view controllers, viewController1, and viewController2. Here is the method I'm concerned about in viewController1:

-(void)msgToServer:(NSString*)identifier:(NSString *)_username{
    NSString *message = [NSString stringWithFormat:@"%@|%@|<END>", identifier, _username]; 
    CFDataRef messageData = (CFDataRef)[message dataUsingEncoding:NSUTF8StringEncoding];

    CFSocketSendData(s, NULL, messageData, 0);
}

this method is working perfectly in viewController1.

Now I am calling this method from viewController2. 开发者_运维知识库I am passing two arguments, identifier and _username. It generates the string perfectly, but when it reaches the last line it misses the value of s -- which is a CFSocketRef. What should I do so that s will retain its value, even if I am in viewController2?

Code from viewController2 which calls the above method:

- (void)viewDidLoad {
    [super viewDidLoad];
    WatchListViewController *watchListViewController = [[WatchListViewController alloc]init];
    [watchListViewController msgToServer:@"PREQ" :userName];
}

Thanks in advance.


you could use the retain function of NSObject.

- (id)retain

See in Apple Documentation

Also have a look to Object Ownership and Disposal in Memory Management Programming Guide

EDITED:

Try with below code

You might have issue with function prototype,not with retaining.

use below -(void)msgToServer:(NSString*)identifier withUsername:(NSString *)_username;.

- (void)viewDidLoad {
    [super viewDidLoad];
    WatchListViewController *watchListViewController = [[WatchListViewController alloc]init];
    [watchListViewController msgToServer:@"PREQ" withUsername:userName];
}

-(void)msgToServer:(NSString*)identifier      withUsername:(NSString *)_username{
    NSString *message = [NSString stringWithFormat:@"%@|%@|<END>", identifier, _username]; 
    CFDataRef messageData = (CFDataRef)[message dataUsingEncoding:NSUTF8StringEncoding];

    CFSocketSendData(s, NULL, messageData, 0);
}


Thanx to all who helped me well i solved this problem in this way: when I push from viewController1 to viewController2 i am passing two parameters "username" and "s" to viewController2 and then I write this method in viewController2.

-(void)msgToServer:(NSString*)identifier:(NSString *)_username{
    NSString *message = [NSString stringWithFormat:@"%@|%@|<END>", identifier, _username]; 
    CFDataRef messageData = (CFDataRef)[message dataUsingEncoding:NSUTF8StringEncoding];

    CFSocketSendData(s, NULL, messageData, 0);
}

then I am calling this method in the same view controller and it works perfectly. I think this is the only solution which i find. if any body can make it more efficient then you are welcome. :)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜