我正在使用最新的SDK开发iOS 5及更高版本。
我必须在Objective C中使用Thread Lock
实现同步方法。
这是我必须做的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();
}
}
[ ... ]
}
如何在Objective C中实现dataLock
?作为NSObject
?
如何在Objective C中执行PostData
和GetData
方法?
答案 0 :(得分:3)
使用NSCondition
课程。 E.g:
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;
}
有关详细信息,请参阅Thread Programming Guide。
答案 1 :(得分:0)
您可以在这里使用@synchronized(dataLock){...代码...},但这不是here所述的最快方式。