0

最新の SDK を使用して iOS 5 以降を開発しています。

Thread LockObjective Cで a を使用して同期メソッドを実装する必要があります。

これは、私がしなければならないことの 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();
        }
    }

    [ ... ]
}

dataLockObjective C で実装するにはどうすればよいですか? としてNSObjectObjective Cでメソッド
を実行するにはどうすればよいですか?PostDataGetData

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 に答える