小编dan*_*kbx的帖子

在iOS 4.0上使用SQLite(FMDB)和线程时的EXC_BAD_ACCESS

我正在使用FMDB处理我的数据库工作正常.该应用程序使用后台线程,它正在做一些工作,需要访问数据库.同时主线程需要在同一个数据库上运行一些查询.FMDB本身有一个小锁定系统,但是,我在我的类中添加了另一个.

只有当我的类指示数据库未使用时,才会执行每个查询.执行操作后,数据库将解锁.只要负载不是太高,这就可以正常工作.当我在主线程上运行的线程访问大量数据时,会发生EXC_BAD_ACCESS错误.

这是看起来:

- (BOOL)isDatabaseLocked {
    return isDatabaseLocked;
}

- (Pile *)lockDatabase {
    isDatabaseLocked = YES;
    return self;        
}

- (FMDatabase *)lockedDatabase {
    @synchronized(self) {
        while ([self isDatabaseLocked]) {
            usleep(20);
            //NSLog(@"Waiting until database gets unlocked...");
        }
        isDatabaseLocked = YES;
        return self.database;       
    }
}

- (Pile *)unlockDatabase {
    isDatabaseLocked = NO;
    return self;            
}
Run Code Online (Sandbox Code Playgroud)

调试器说错误发生[FMResultSet next]在该行

rc = sqlite3_step(statement.statement);
Run Code Online (Sandbox Code Playgroud)

我仔细检查了所有保留计数,此时所有对象都存在.同样,它只发生在主线程在后台线程运行时启动大量查询时(它本身总是产生很大的负载).错误总是由主线程产生,而不是由后台线程产生.

我的最后一个想法是两个线程同时运行lockedDatabase,这样他们就可以得到一个数据库对象.这就是我通过"@synchronized(self)"添加互斥锁定的原因.但是,这没有帮助.

有人有线索吗?

sqlite iphone exc-bad-access objective-c fmdb

7
推荐指数
2
解决办法
5744
查看次数

如何用JS深度检查“null”或“undefined”?

在 Node.JS 项目中,假设我有来自 API 或具有如下结构的任何其他对象的响应

{
  data: {
    info: {
      user: {
        name: "Hercules",
        password: "Iamthegreatest!"
        email: "hercules@olymp.gr"
      }
    }       
  }
}
Run Code Online (Sandbox Code Playgroud)

访问对象的成员非常容易。但是,在访问任何值之前检查是否存在会导致 PITA。

我可以假设数据始终存在。信息、用户、姓名、密码和电子邮件可能存在,也可能不存在。可以存在没有用户的有效信息对象,也可以存在没有电子邮件地址的有效用户。

这导致代码如下

if (data && data.info && data.info.user && data.info.user.email) {
  var email = data.info.user.email;
}
Run Code Online (Sandbox Code Playgroud)

仅检查

if (data.info.user.email)
  // do something
}
Run Code Online (Sandbox Code Playgroud)

如果任何对象不存在,则会引发错误。

有没有更短的方法来深入检查这样的结构是否存在?

javascript null undefined node.js

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