需要保留CFSocketRef吗?

发布于 2024-11-07 01:21:50 字数 1036 浏览 4 评论 0原文

我面临一个问题:我有两个视图控制器,viewController1viewController2。 这是我在 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);
}

该方法在 viewController1 中运行良好。

现在我从 viewController2 调用此方法。我传递两个参数,identifier_username。它完美地生成了字符串,但是当它到达最后一行时,它错过了 s 的值——它是一个 CFSocketRef。 我应该怎么做才能使 s 保留其值,即使我在 viewController2 中?

来自 viewController2 的代码调用上述方法:

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

提前致谢。

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

作妖 2024-11-14 01:21:50

您可以使用 NSObjectretain 函数。

- (id)retain

参见 Apple 文档

另请参阅 内存管理编程指南中的对象所有权和处置

编辑:

尝试使用以下代码

您可能有问题在于函数原型,而不在于保留。

使用下面
-(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);
}

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);
}
风吹雪碎 2024-11-14 01:21:50

感谢所有帮助我的人,我通过以下方式解决了这个问题:
当我从 viewController1 推送到 viewController2 时,我将两个参数“username”和“s”传递给 viewController2 并然后我在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);
}

然后我在同一个视图控制器中调用这个方法,它工作得很好。我认为这是我找到的唯一解决方案。如果任何机构可以提高效率,那么欢迎您。 :)

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. :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文