Cocoa 中的分布式对象

Posted

技术标签:

【中文标题】Cocoa 中的分布式对象【英文标题】:Distributed Objects in Cocoa 【发布时间】:2012-07-18 19:00:03 【问题描述】:

我试图在我的应用程序中跨两个进程出售一个对象。但是,当我测试我的代码时,接收出售对象的进程只是阻塞。我或多或少遵循了http://www.mikeash.com/pyblog/friday-qa-2009-02-20-the-good-and-bad-of-distributed-objects.html 上的示例代码。

下面是我的两个进程的代码:

/*
 * Description: Vends an object that the receiver can then access
 *              through the distributed object.
 */

#import <Cocoa/Cocoa.h>
#import <iostream>

using namespace std;

int main() 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    cout << "Starting vendor " << endl;

    NSMutableArray *mutable_array;
    [mutable_array addObject:@"Louis Lang"];
    [mutable_array addObject:@"John Doe"];

    NSConnection *connection = [NSConnection connectionWithReceivePort:[NSPort port] sendPort:nil];
    [connection setRootObject:mutable_array];
    [connection registerName:@"com.example.whatever"];

    [[NSRunLoop currentRunLoop] run];


    [pool drain];

    return 0;

还有“接收者”

/*
 * Description: Receives the vended object from the server
 *
 */

#import <Cocoa/Cocoa.h>
#import <iostream>

using namespace std;

int main() 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    cout << "Starting receiver." << endl;

    id theObject = (id)[NSConnection rootProxyForConnectionWithRegisteredName:@"com.example.whatever" host:nil];

    int the_count = [theObject count];

    NSLog(@"There are %i items in mutable_array", the_count);

    [pool drain];

    return 0;

【问题讨论】:

【参考方案1】:

您的代码大部分看起来都还可以,至少是分布式对象部分。但是:

NSMutableArray* mutable_array = [[NSMutableArray alloc] init];
[mutable_array addObject:@"Louis Lang"];
[mutable_array addObject:@"John Doe"];

我认为肯定会有所帮助。

如果您使用的是 Xcode 4.4+,也可以这样做:

NSArray* array = @[ @"Louis Lang", @"John Doe" ];

【讨论】:

就是这样,我正在出售一个 nil 对象。谢谢!

以上是关于Cocoa 中的分布式对象的主要内容,如果未能解决你的问题,请参考以下文章

Cocoa/PyObjC 分布式对象缺少一些东西

Cocoa/Objective-C 和分布式对象的例子?

Cocoa 分布式对象、GC 客户端、非 GC 服务器

可可分布式对象中的双向通信

在可可中实现分布式对象

研学社•架构组 | CoCoA:大规模机器学习的分布式优化通用框架