小编ban*_*isa的帖子

Objective-C/C给出枚举默认值

我在某处读到了枚举默认值,如下所示:

typedef enum  {
MarketNavigationTypeNone = 0,
MarketNavigationTypeHeirachy = 1,
MarketNavigationTypeMarket = 2
} MarketNavigationLevelType;
Run Code Online (Sandbox Code Playgroud)

..但我不记得这样做的价值.如果我不给他们默认值 - 然后有人后来重新排序枚举 - 有什么风险?

如果我总是使用枚举名称,甚至不用它们的整数值来引用它们,那么有任何风险吗?

我能想到的唯一可能的问题是,如果我从数据库中的int值初始化枚举 - 并且重新排序枚举 - 那么应用程序将会中断.

c enums enumeration objective-c

10
推荐指数
2
解决办法
7203
查看次数

双重检查锁定 - 目标c

由于内存模型,我意识到双重检查锁定在java中存在缺陷,但这通常与单例模式相关联并优化单例的创建.

在这个案例中,在objective-c中怎么样:

我有一个布尔标志来确定我的应用程序是否是流数据.我有3个方法,startStreaming,stopStreaming,streamingDataReceived,我使用以下方法保护它们免受多个线程的影响:

- (void) streamingDataReceived:(StreamingData *)streamingData {
    if (self.isStreaming) {
        @synchronized(self) {
            if (self.isStreaming) {

- (void) stopStreaming {
    if (self.isStreaming) {
        @synchronized(self) {
            if (self.isStreaming) {

- (void) startStreaming:(NSArray *)watchlistInstrumentData {
    if (!self.isStreaming) {
        @synchronized(self) {
            if (!self.isStreaming) {
Run Code Online (Sandbox Code Playgroud)

这次双重检查不成功吗?双重检查在objective-c中是否与java中有类似的问题?这种模式有哪些替代方案(反模式).

谢谢

locking objective-c double-checked-locking

5
推荐指数
1
解决办法
714
查看次数