我是目标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
我正在尝试使用Apple的UIAutomation为具有服务器端组件的iOS应用程序编写单元测试.为了在各种状态下设置测试服务器(以及模拟通过我的服务器进行通信的两个客户端),我想在基于javascript的测试中发出HTTP get请求.
任何人都可以提供一个示例,说明如何直接从UIAutomation javascript测试中发出HTTP GET请求,或者如何从我的UIAutomation javascript测试中调用shell脚本?
FWIW,UIAutomation运行时中缺少所有浏览器提供的大多数核心对象.例如,尝试使用XMLHTTPRequest,您将收到一个异常报告,它无法找到该变量.
谢谢!
我的项目依赖于第三方静态库和three20库.在XCode 3.X中,为了让我的项目进行编译,我必须在"Other Linker Flags"构建设置中使用-force_load标志,并指定我想要包含的三个库中的每一个.
尝试在XCode 4.2中构建存档时,我收到了"重复符号"错误.我通过删除七个单独的-force_load标志解决了这个问题,这些标志引用了我有依赖关系的三个库中的每个库.
我的项目现在成功构建.
我想知道是否有人可以解释为什么这个改变有效?是否存在XCode 4.2修复的错误,或者是行为改变?这篇文章表明 XCode 3.2中存在一个错误,但如果有人可以为我提供更多关于这个主题的信息,那将是很好的,所以我可以肯定通过删除这些-force_load标志我没有做错的事.
谢谢!
伙计们,
我正在寻找一种设计模式,使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) 我正在尝试调试我的许多用户在该领域报告的崩溃错误.所有都显示我相同的堆栈:
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) 我希望有人可以解释为什么两小时的数据清除据称导致我的mysql实例上的数据使用量减少了32 KB.这是我的详细信息:
我有一个mysql数据库(在Amazon RDS上运行),我试图清除数据.我这样做是为了避免耗尽存储空间,因为亚马逊会限制你1TB,如果我们不采取任何行动,我们最终会达到这个限制.
我正在使用此命令来计算我的表和索引的大小:
select * from information_schema.tables;
Run Code Online (Sandbox Code Playgroud)
特别是有两个InnoDB表占用了我的大部分存储空间.我有一个进程迭代我最大的表删除记录.在时间t = 0,我运行上面的SQL查询,并得到以下数据长度和索引数据长度的结果:
两个小时后,在连续运行数据库清理程序之后,我运行了上面的SQL语句并获得了以下内容:
这基本上意味着我削减了32 KB的表数据和102 MB的索引数据.
指数的减少是有道理的.表格数据的减少非常小.在此期间不可能插入其他数据,因为我在我的数据库的备份副本上运行此测试(关于RDS的一个好处是,您可以完全复制数据库并运行以运行实验在,例如这一个).我还确认AUTO_INCREMENT值两次都相同.
有人可以解释为什么数据长度没有太大变化吗?数据长度只是一个非常快速和肮脏的近似值吗?mysql最终会有其他一些压缩步骤吗?或者我是否完全误解了这些领域的使用?
谢谢!
更新
我可能已经弄明白了 - 在时间t = 0
四小时后,
这意味着我已经将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上的这篇文章似乎也证实了我的分析.
任何人都可以解释为什么我可能会看到这个堆栈(由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有不同的继承树,所以我处理两者,但它似乎没有什么区别.
根据Google关于"测试应用内结算"的文档,有四种保留的产品ID可用于应用内测试结算和订阅服务:
我们可以用来测试端到端的应用内订阅的保留产品ID是什么,这是由Google上周推出的?android.test.purchased仅适用于"inapp"产品类型,而不适用于"subs"产品类型.
我在iOS7中看到一个奇怪的行为,我在viewDidLoad中将键盘外观设置为UIKeyboardAppearanceDark,但键盘最初将以默认(浅灰色)样式显示,然后在一秒钟之后切换到黑暗样式.
当我在XIB文件中设置键盘外观时,我在另一个UIViewController中进一步看到此行为 - 视图加载并在视图出现时从亮到暗快速闪烁.
任何人都可以提出这种行为的原因,或者这是iOS7中的错误?
根据POODLE漏洞的披露,Google发表以下声明:
为了解决HTTPS服务器中的错误,浏览器将使用旧协议版本(包括SSL 3.0)重试失败的连接
DefaultHttpClient Java库和Objective C NSURLConnection类也是如此吗?我相信答案是"不",但我想仔细检查.
ios ×5
android ×3
autorelease ×1
compilation ×1
google-play ×1
httparty ×1
ios7 ×1
iphone ×1
java ×1
javascript ×1
mysql ×1
objective-c ×1
ruby ×1
sigabrt ×1
sqlite ×1
ssl ×1
testing ×1
uikeyboard ×1
xcode ×1