小编esi*_*ver的帖子

返回自动释放目标c中的错误吗?

我是目标c的新手,我试图了解如何/何时调用autorelease.我理解简单的用例:

- (void) foo {
    Bar *b = [[[Bar alloc] init] autorelease];
    [self doSomething:b];
  }
Run Code Online (Sandbox Code Playgroud)

下一个案例怎么样 - 这是一个错误,因为该对象将在离开makeBar范围后立即释放?

-(Bar*) makeBar
{
    return [[[Bar alloc] init] autorelease];
}
Run Code Online (Sandbox Code Playgroud)

如果来电者保留怎么办?

Bar *b = [[self makeBar] retain];
Run Code Online (Sandbox Code Playgroud)

谢谢,-Eric

memory-management objective-c autorelease

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

从iOS UIAutomation发出JavaScript中的同步HTTP GET请求或调用shell脚本

我正在尝试使用Apple的UIAutomation为具有服务器端组件的iOS应用程序编写单元测试.为了在各种状态下设置测试服务器(以及模拟通过我的服务器进行通信的两个客户端),我想在基于javascript的测试中发出HTTP get请求.

任何人都可以提供一个示例,说明如何直接从UIAutomation javascript测试中发出HTTP GET请求,或者如何从我的UIAutomation javascript测试中调用shell脚本?

FWIW,UIAutomation运行时中缺少所有浏览器提供的大多数核心对象.例如,尝试使用XMLHTTPRequest,您将收到一个异常报告,它无法找到该变量.

谢谢!

javascript iphone integration-testing ios ios-ui-automation

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

为什么在XCode 4.2中我的three20依赖项不再需要-force_load?

我的项目依赖于第三方静态库和three20库.在XCode 3.X中,为了让我的项目进行编译,我必须在"Other Linker Flags"构建设置中使用-force_load标志,并指定我想要包含的三个库中的每一个.

尝试在XCode 4.2中构建存档时,我收到了"重复符号"错误.我通过删除七个单独的-force_load标志解决了这个问题,这些标志引用了我有依赖关系的三个库中的每个库.

我的项目现在成功构建.

我想知道是否有人可以解释为什么这个改变有效?是否存在XCode 4.2修复的错误,或者是行为改变?这篇文章表明 XCode 3.2中存在一个错误,但如果有人可以为我提供更多关于这个主题的信息,那将是很好的,所以我可以肯定通过删除这些-force_load标志我没有做错的事.

谢谢!

xcode compilation ios

7
推荐指数
1
解决办法
2945
查看次数

用于在Android中写入SQLite数据库的推荐设计模式

伙计们,

我正在寻找一种设计模式,使UI线程能够与客户端SQLite数据库交互,该数据库可能具有批量插入(需要10秒),快速插入和读取,并且不会阻止UI线程.

我想知道我是否正在使用最佳设计模式,因为我最近调试了死锁和同步问题,而且我对我的最终产品没有100%的信心.

所有数据库访问现在都通过单例类进行瓶颈.这是伪代码,显示我如何在我的单例DataManager中接近写入:

public class DataManager {

  private SQLiteDatabase mDb;
  private ArrayList<Message> mCachedMessages;

  public ArrayList<Message> readMessages() { 
    return mCachedMessages; 
  }

  public void writeMessage(Message m) {
    new WriteMessageAsyncTask().execute(m);
  }

  protected synchronized void dbWriteMessage(Message m) {
    this.mDb.replace(MESSAGE_TABLE_NAME, null, m.toContentValues());
  }

  protected ArrayList<Message> dbReadMessages() {
    // SQLite query for messages
  }

  private class WriteMessageAsyncTask extends AsyncTask<Message, Void, ArrayList<Messages>> {
    protected Void doInBackground(Message... args) {
       DataManager.this.mDb.execSQL("BEGIN TRANSACTION;");
       DataManager.this.dbWriteMessage(args[0]);
       // More possibly expensive DB writes
       DataManager.this.mDb.execSQL("COMMIT TRANSACTION;");
       ArrayList<Messages> newMessages = DataManager.this.dbReadMessages();
       return newMessages;
    } …
Run Code Online (Sandbox Code Playgroud)

sqlite multithreading android synchronization

7
推荐指数
1
解决办法
4998
查看次数

什么可以在iOS9.1中的dispatch_async上触发SIGABRT?

我正在尝试调试我的许多用户在该领域报告的崩溃错误.所有都显示我相同的堆栈:

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note:  EXC_CORPSE_NOTIFY
Triggered by Thread:  8
OS Version:          iOS 9.1 (13B143)
Code Type:           ARM (Native)

0   libsystem_kernel.dylib          0x392ccc84 0x392b8000 + 85124
1   libsystem_pthread.dylib         0x39370732 0x3936c000 + 18226
2   libsystem_c.dylib               0x39264f9a 0x3921a000 + 307098
3   libsystem_c.dylib               0x39264f2c 0x3921a000 + 306988
4   libsystem_c.dylib               0x392447ea 0x3921a000 + 174058
5   MyApp                           0x000cb3e0 __69-[MyDataManager myMethod:]_block_invoke (MyDataManager.m:2367)
Run Code Online (Sandbox Code Playgroud)

2367行简单地说:

2363: BOOL success = [db executeUpdate:@"INSERT INTO table (id, content) VALUES (?, ?)", message.remoteId, message.content];
2364: assert(success);
2365: …
Run Code Online (Sandbox Code Playgroud)

grand-central-dispatch sigabrt ios dispatch-async

7
推荐指数
1
解决办法
830
查看次数

解释mysql的information_schema.tables DATA_LENGTH,INDEX_DATA_LENGTH和DATA_FREE

我希望有人可以解释为什么两小时的数据清除据称导致我的mysql实例上的数据使用量减少了32 KB.这是我的详细信息:

我有一个mysql数据库(在Amazon RDS上运行),我试图清除数据.我这样做是为了避免耗尽存储空间,因为亚马逊会限制你1TB,如果我们不采取任何行动,我们最终会达到这个限制.

我正在使用此命令来计算我的表和索引的大小:

select * from information_schema.tables;
Run Code Online (Sandbox Code Playgroud)

特别是有两个InnoDB表占用了我的大部分存储空间.我有一个进程迭代我最大的表删除记录.在时间t = 0,我运行上面的SQL查询,并得到以下数据长度和索引数据长度的结果:

  • 数据长度:56431116288
  • 索引数据长度:74233151488

两个小时后,在连续运行数据库清理程序之后,我运行了上面的SQL语句并获得了以下内容:

  • 数据长度:56431083520
  • 索引数据长度:74126147584

这基本上意味着我削减了32 KB的表数据和102 MB的索引数据.

指数的减少是有道理的.表格数据的减少非常小.在此期间不可能插入其他数据,因为我在我的数据库的备份副本上运行此测试(关于RDS的一个好处是,您可以完全复制数据库并运行以运行实验在,例如这一个).我还确认AUTO_INCREMENT值两次都相同.

有人可以解释为什么数据长度没有太大变化吗?数据长度只是一个非常快速和肮脏的近似值吗?mysql最终会有其他一些压缩步骤吗?或者我是否完全误解了这些领域的使用?

谢谢!

更新

我可能已经弄明白了 - 在时间t = 0

  • DATA_FREE = 77594624

四小时后,

  • DATA_FREE = 256901120

这意味着我已经将DATA_FREE增加了大约171MB.

这是否意味着如果我插入另一个171MB,它将来自DATA_FREE池,所以我的数据长度不会增加?

换句话说,假设我从一个新的InnoDB表开始并插入20 GB的数据(假设20 GB包含所有多余的InnoDB内容,我意识到InnoDB中存储的数据大于MyISAM),然后我删除所有数据,然后我插入10 GB的数据.当我从information_schema.tables运行select*时,我应该看到10 GB的数据长度和10 GB的数据,对吧?我不应该期望看到数据长度为30 GB /数据的0 GB,也不应该期望看到数据长度为10 GB/10 GB的数据?

更新2

Stack Overflow上的这篇文章似乎也证实了我的分析.

mysql

6
推荐指数
1
解决办法
4593
查看次数

执行过期异常崩溃Ruby线程,但处理Timeout :: Error

任何人都可以解释为什么我可能会看到这个堆栈(由HTTParty :: post请求引起)当方法的调用如下所示:

begin
  response = HTTParty::post(url, options)
rescue
  logger.warn("Could not post to #{url}")      
rescue Timeout::Error
  logger.warn("Could not post to #{url}: timeout")      
end
Run Code Online (Sandbox Code Playgroud)

堆栈:

/usr/local/lib/ruby/1.8/timeout.rb:64:in `timeout'
/usr/local/lib/ruby/1.8/net/protocol.rb:134:in `rbuf_fill'
/usr/local/lib/ruby/1.8/net/protocol.rb:104:in `read_all'
/usr/local/lib/ruby/1.8/net/http.rb:2228:in `read_body_0'
/usr/local/lib/ruby/1.8/net/http.rb:2181:in `read_body'
/usr/local/lib/ruby/1.8/net/http.rb:2206:in `body'
/usr/local/lib/ruby/1.8/net/http.rb:2145:in `reading_body'
/usr/local/lib/ruby/1.8/net/http.rb:1053:in `request_without_newrelic_trace'
[GEM_ROOT]/gems/newrelic_rpm-3.1.1/lib/new_relic/agent/instrumentation/net.rb:20:in `request'
[GEM_ROOT]/gems/newrelic_rpm-3.1.1/lib/new_relic/agent/method_tracer.rb:242:in `trace_execution_scoped'
[GEM_ROOT]/gems/newrelic_rpm-3.1.1/lib/new_relic/agent/instrumentation/net.rb:19:in `request'
/usr/local/lib/ruby/1.8/net/http.rb:1037:in `request_without_newrelic_trace'
/usr/local/lib/ruby/1.8/net/http.rb:543:in `start'
/usr/local/lib/ruby/1.8/net/http.rb:1035:in `request_without_newrelic_trace'
[GEM_ROOT]/gems/newrelic_rpm-3.1.1/lib/new_relic/agent/instrumentation/net.rb:20:in `request'
[GEM_ROOT]/gems/newrelic_rpm-3.1.1/lib/new_relic/agent/method_tracer.rb:242:in `trace_execution_scoped'
[GEM_ROOT]/gems/newrelic_rpm-3.1.1/lib/new_relic/agent/instrumentation/net.rb:19:in `request'
[GEM_ROOT]/gems/httparty-0.7.8/lib/httparty/request.rb:69:in `perform'
[GEM_ROOT]/gems/httparty-0.7.8/lib/httparty.rb:390:in `perform_request'
[GEM_ROOT]/gems/httparty-0.7.8/lib/httparty.rb:358:in `post'
[GEM_ROOT]/gems/httparty-0.7.8/lib/httparty.rb:426:in `post'
Run Code Online (Sandbox Code Playgroud)

如您所见,我正在处理Timeout :: Error异常.这是在Ruby 1.8.7中.我很清楚在Ruby 1.8.7中,StandardException和TimeoutException有不同的继承树,所以我处理两者,但它似乎没有什么区别.

ruby exception-handling timeoutexception httparty

6
推荐指数
1
解决办法
4919
查看次数

使用Android测试应用内订阅的正确保留产品ID是什么?

根据Google关于"测试应用内结算"的文档,有四种保留的产品ID可用于应用内测试结算和订阅服务:

  • android.test.purchased
  • android.test.canceled
  • android.test.refunded
  • android.test.item_unavailable

我们可以用来测试端到端的应用内订阅的保留产品ID是什么,这是由Google上周推出的?android.test.purchased仅适用于"inapp"产品类型,而不适用于"subs"产品类型.

testing android subscriptions google-play

6
推荐指数
1
解决办法
3063
查看次数

iOS7延迟申请UIKeyboardAppearanceDark

我在iOS7中看到一个奇怪的行为,我在viewDidLoad中将键盘外观设置为UIKeyboardAppearanceDark,但键盘最初将以默认(浅灰色)样式显示,然后在一秒钟之后切换到黑暗样式.

当我在XIB文件中设置键盘外观时,我在另一个UIViewController中进一步看到此行为 - 视图加载并在视图出现时从亮到暗快速闪烁.

任何人都可以提出这种行为的原因,或者这是iOS7中的错误?

uikeyboard ios ios7

6
推荐指数
1
解决办法
1191
查看次数

Apache DefaultHttpClient(Android)和NSURLConnection(iOS)是否重试与旧协议版本的失败连接?

根据POODLE漏洞的披露,Google发表以下声明:

为了解决HTTPS服务器中的错误,浏览器将使用旧协议版本(包括SSL 3.0)重试失败的连接

DefaultHttpClient Java库和Objective C NSURLConnection类也是如此吗?我相信答案是"不",但我想仔细检查.

java ssl android ios

6
推荐指数
1
解决办法
349
查看次数