ios - iOS静态库中的单例
<p><p>我有一个包含 Singleton 类(FMDB SQLite 数据访问)的静态库,现在我从我的主应用程序打开连接并做一些事情......这有效,之后我的库中的一个方法想要调用我的单例的方法,我得到的错误是 </p>
<pre><code>-: message sent to deallocated instance 0xa443960
</code></pre>
<p>这难道不是我想要达到的目标吗?</p>
<p>这是我单例的短版</p>
<pre><code> static MySingleton* _sharedMySingleton = nil;
FMDatabase *database;
#ifndef __clang_analyzer__
+(MySingleton*)sharedMySingleton
{
@synchronized()
{
if (!_sharedMySingleton)
[ init];
return _sharedMySingleton;
}
}
#endif
+(id)alloc
{
@synchronized()
{
NSAssert(_sharedMySingleton == nil, @"Attempted to allocate a second instance of a singleton.");
_sharedMySingleton = ;
return _sharedMySingleton;
}
}
-(Resource *)getResourceForName:(NSString *)name
{
NSString *select = @"SELECT Data, MimeType FROM File WHERE FileName = ? LIMIT 1";
NSArray *arguments = ];
FMResultSet *s = ;
if (s == NULL)
{
FuncFileLog(@"getResourceForName file cant be loaded: %@", );
return nil;
}
NSData *data = nil;
NSString *mimeType;
while ()
{
data = ];
mimeType = ;
}
Resource *resource = [[ initWithData:data mimeType:mimeType] autorelease];
return resource;
}
-(BOOL)openDatabase
{
database = ];
return ;
}
-(void)closeDatabase
{
;
;
}
-(void)dealloc
{
if (database != NULL)
{
;
}
;
;
}
@end
</code></pre>
<p>编辑:</p>
<p>我发现 FMDatabase 中的 dealloc 在我的应用程序启动返回后被调用,但不知道为什么。</p>
<p>EDIT2:</p>
<p>目前我认为一个问题是这一行</p>
<p>database = ];
这里我要保留对象。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>您实际上并没有分配单例实例:</p>
<pre><code>if (!_sharedMySingleton)
[ init];
</code></pre>
<p>应该是:</p>
<pre><code>if (!_sharedMySingleton)
_sharedMySingleton = [ init];
</code></pre>
<p>并转储覆盖的 <code>alloc</code> 方法。</p>
<p>另外,<code>database</code> 应该是类中的实例变量,而不是全局范围。</p></p>
<p style="font-size: 20px;">关于ios - iOS静态库中的单例,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/15226269/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/15226269/
</a>
</p>
页:
[1]