0

我正在使用最新的 SDK 开发 iOS 5 及更高版本。

Thread Lock我必须在 Objective C中实现一个同步方法。

这是我必须做的Java版本:

public abstract class MyClass 
{
    [ ... ]

    private static Object dataLock = new Object();

    public static long dataId = 0;

    [ ... ]

    public static void PostData(byte[] data)
    {
        synchronized (MyClass.getDataLock())
        {
            dataId++;
            MyClass.getDataLock().notify();
        }
    }

    public static byte[] GetData()
    {
        synchronized (MyClass.getDataLock())
        {
            try
            {
                MyClass.getDataLock().wait();
            }
            catch (InterruptedException ex)
            {}

            return MyClass.getData();
        }
    }

    [ ... ]
}

如何dataLock在 Objective C 中实现?作为一个NSObject在Objective C
中我该怎么做PostData和方法?GetData

4

2 回答 2

3

使用NSCondition类。例如:

static NSCondition* g_dataLock = nil;

...

+ (void)initialize
{
    if (self == [MyClass class])
    {
        g_dataLock = [NSCondition new];
    }
}

+ (void)postData:(NSData*)data
{
    [g_dataLock lock];
    dataId++;
    [g_dataLock signal];
    [g_dataLock unlock];
}

+ (NSData*)getData
{
    NSData* data = nil;

    [g_dataLock lock];
    [g_dataLock wait];

    data = ...

    [g_dataLock unlock];

    return data;
}

有关更多信息,请参阅线程编程指南

于 2013-02-18T11:11:15.777 回答
0

您可以使用 @synchronized(dataLock){...code here...} 但这不是这里描述的最快方式。

于 2013-02-18T10:49:54.097 回答