首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >iOS开发中的线程安全

iOS开发中的线程安全
EN

Stack Overflow用户
提问于 2011-04-26 15:25:41
回答 2查看 3.9K关注 0票数 0

根据维基百科对thread-safety的解释,线程安全代码可以在多线程中运行。

对于iOS 3.x,UIKit不是线程安全,因为4.0,UIKIt是线程安全。

在我们的实现中,我们可以使用synchronized来构建线程安全代码。我关于线程安全的问题是:

1)。如何通过工具或其他方式检测线程安全编码问题? 2)。对于为iOS开发编写线程安全代码,有什么好的实践吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-26 16:10:25

4.0开始,UIKIt是线程安全的。

基本上,UIKit不是线程安全的。从4.0开始,只有在UIKit中绘制图形上下文的图形是线程安全的。

1)嗯,我也想知道:-)

2) Concurrency Programming Guide怎么样?

票数 5
EN

Stack Overflow用户

发布于 2012-12-22 19:37:32

若要使非线程安全的对象线程安全,请考虑使用代理(请参阅下面的代码)。例如,当在后台线程中解析数据时,我将它用于NSDateFormatter,它不是一个线程安全类。

代码语言:javascript
运行
复制
/**
 @brief
 Proxy that delegates all messages to the specified object
 */
@interface BMProxy : NSProxy {
    NSObject *object;
    BOOL threadSafe;
}

@property(atomic, assign) BOOL threadSafe;

- (id)initWithObject:(NSObject *)theObject;
- (id)initWithObject:(NSObject *)theObject threadSafe:(BOOL)threadSafe;

@end

@implementation BMProxy

@synthesize threadSafe;

- (id)initWithObject:(NSObject *)theObject {
    object = [theObject retain];
    return self;
}

- (id)initWithObject:(NSObject *)theObject threadSafe:(BOOL)b {
    if ((self = [self initWithObject:theObject])) {
        self.threadSafe = b;
    }
    return self;
}

- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector {
    return [object methodSignatureForSelector:aSelector];
}

- (void)forwardInvocation:(NSInvocation *)anInvocation {
    if (self.threadSafe) {
        @synchronized(object) {
            [anInvocation setTarget:object];
            [anInvocation invoke];
        }
    } else {
        [anInvocation setTarget:object];
        [anInvocation invoke];
    }
}

- (BOOL)respondsToSelector:(SEL)aSelector {
    BOOL responds = [super respondsToSelector:aSelector];
    if (!responds) {
        responds = [object respondsToSelector:aSelector];
    }
    return responds;
}

- (void)dealloc {
    [object release];
    [super dealloc];
}

@end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5787240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档