需要保留一个CFSocketRef?

时间:2011-05-14 09:43:13

标签: objective-c ios retain core-foundation

我遇到了一个问题:我有两个视图控制器,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];
}

提前致谢。

2 个答案:

答案 0 :(得分:0)

您可以使用retain的{​​{1}}功能。

NSObject

See in Apple Documentation

另请参阅“内存管理编程指南”中的Object Ownership and Disposal

<强>编辑:

尝试使用以下代码

您可能遇到函数原型问题,而不是保留问题。

使用以下 - (id)retain

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

答案 1 :(得分:0)

感谢所有帮助我的人,我以这种方式解决了这个问题: 当我从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);
}

然后我在同一个视图控制器中调用此方法,它完美地工作。我认为这是我找到的唯一解决方案。如果有任何身体可以使它更有效,那么欢迎你。 :)