【问题标题】:Running server and client in 2 blocks via dispatch queues通过调度队列在 2 个块中运行服务器和客户端
【发布时间】:2012-11-14 08:44:38
【问题描述】:

我想编写一个应用程序,它可以运行两个不同的“线程”,一个用于服务器,一个用于客户端。我听说,在 Objective-C 调度队列和块是要走的路。我已经阅读了有关 Blocks and Dispatch Queues 的 Apple 文档,但我在编码的一开始还是失败了。

我说得对吗,我需要创建 2 个块,一个用于我的服务器代码,一个用于我的客户端代码,然后将这些块放入调度队列以同时运行?

我现在正试图为我的服务器创建一个块,但惨遭失败。我尝试了以下方法:

#import <Foundation/Foundation.h>

@interface Server : NSObject {
    void (^server)(NSString*, int);
}

@end

然后

 #import "Server.h"

@implementation Server
   server = ^(NSString* host, int port) {
};

@end

我想我必须先在头文件中声明块变量,以便以后可以在我的 ViewController 中引用它。任何关于带有一些代码示例的一般结构的答案将不胜感激:)

【问题讨论】:

    标签: objective-c ios xcode


    【解决方案1】:

    我建议创建一个typedef,这样您就可以轻松创建该类型的块。像这样:

    typedef void (^ServerBlock)(NSString *host, int port);
    

    在您的 .h 上:

    ServerBlock myServerBlock;
    

    在您的 .m 上:

    myServerBlock = ^(NSString* host, int port) {};
    

    您可以将您的 typedef 放在一个名为 constants 的 .h 文件中,然后将其导入您的 .pch 文件(这只是建议...)

    【讨论】:

    • 嗨,谢谢!但是,如果我在我的项目文件夹中创建一个 Constants.h 并在 .pch 文件中的 #ifdec __OBJ __ 语句之后添加 #import ,Xcode 找不到我的头文件?
    • 如果应该能找到。清理您的项目,关闭您的项目,然后重新启动 Xcode。
    • 不幸的是它没有。如果我将它添加到“”中,在我的 ViewController.h 中,它会找到它。然后我遇到了下一个问题,在 typedef 定义中告诉我“类型名称不允许指定存储类”。
    • 我刚刚在我的项目中进行了测试,我为您提供的解决方案有效。如果您需要进一步的帮助,请向我展示您的代码。
    • Constants.h:#import &lt;Foundation/Foundation.h&gt; @interface Constants : NSObject { typedef void (^ServerBlock) (NSString *host, int port); } @endProject-Prefix.pch:#import &lt;Availability.h&gt; #ifndef __IPHONE_4_0 #warning "This project uses features only available in iOS SDK 4.0 and later." #endif #ifdef __OBJC__ #import &lt;UIKit/UIKit.h&gt; #import &lt;Foundation/Foundation.h&gt; #import &lt;Constants.h&gt; #endifServer.h:#import &lt;Foundation/Foundation.h&gt; @interface Server : NSObject ServerBlock myServer; @end
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多