在单独的线程上运行代码的最佳方法是什么?是吗:
[NSThread detachNewThreadSelector: @selector(doStuff) toTarget:self withObject:NULL];
Run Code Online (Sandbox Code Playgroud)
要么:
NSOperationQueue *queue = [NSOperationQueue new];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self
selector:@selector(doStuff:)
object:nil;
[queue addOperation:operation];
[operation release];
[queue release];
Run Code Online (Sandbox Code Playgroud)
我一直在做第二种方式,但我读过的Wesley Cookbook使用的是第一种方式.
我加入了ARC的行列.在过去,我会将我的委托属性声明为:
@property(assign) id<MyProtocol> delegate;
Run Code Online (Sandbox Code Playgroud)
所以我想我会在ARC下做到这一点:
@property(weak) id<MyProtocol> delegate;
Run Code Online (Sandbox Code Playgroud)
不是这样.在.m中的@synthesize语句我有一个编译错误:
*语义问题:__ weak属性'委托'的现有ivar'委托'必须是__weak*
我已经声明它虽然很弱!另外,我如何将实现协议的类传递给弱引用的属性.我是否必须将其包装在其中一个奇怪的obj_unretained调用中?
任何有关这方面的帮助将非常感谢.
我有一个对象,其属性具有在我的xcdatamodeld对象中定义的Date类型.为什么它使用NSTimeInterval生成NSManagedObject类?如何在其上设置NSDate然后让NSDate退出呢?
我已经创建了一个完整的简化示例,可以复制我遇到的问题.
function TestObj() {
var self = this;
self.getStuff = function(aString, callback) {
// TODO
}
}
describe("server communications", function() {
it("it calls the server", function() {
var obj = new TestObj();
obj.getStuff = jasmine.createSpy();
// swap the above line for this and it makes no difference
// spyOn(obj, "getStuff");
var functionVar = function() {
};
obj.getStuff("hello", functionVar);
expect(obj.getStuff).toHaveBeenCalledWith(
[ "hello", jasmine.any(Function) ]);
});
});
Run Code Online (Sandbox Code Playgroud)
我得到以下输出,而不是通过单元测试:
预期的间谍被调用:[['hello',<jasmine.any(function Function(){[native code]})>]]但被调用:[['hello',Function]]
为什么它没有认识到我传入的函数(function(){})实际上是函数?是什么原因代码的东西是什么?其他人有jasmine.any(Function)这个问题吗?谢谢!
EDITED
我尝试使用spyOn而不是jasmine.createSpy(),它没有任何区别.我只尝试了一个参数并且它有效.引入第一个字符串参数会破坏jasmine.any(Function) - 任何想法?
我有以下课程:
public abstract class MyClass<T extends Object> {
protected T createNewFromData(Reader reader){
GSON.fromJSON(reader,T.class); // T.class isn't allowed :(
}
}
Run Code Online (Sandbox Code Playgroud)
如何将Class <T>实例传递到那里?是否有一些奇怪和古怪的工作?
有没有办法获得Class <T>引用而不是来自T类型的预实例化对象?它也不会让我这样做:
T t = new T();
Class<T> klass = t.class;
Run Code Online (Sandbox Code Playgroud)
尝试#2
有趣的是,如果我从类定义中删除"extends JSONOBjBase",我只是得到一个未经检查的强制转换警告(没有错误).还有另一种方法可以写出演员表是如何完成的吗?
我想在我的UIWebView顶部使用UINavigationBar,但我想手动控制标题,后退按钮,后退按钮的功能 - 等等.换句话说,我从不想推送或弹出视图.我只想在用户点击Web视图时更改UINavigationBar内容.
我在哪里,我将UINavigationBar添加到我的superView并使其高44像素.由于我没有navigationItem,如何设置标题?我该怎么设置一个假的后退按钮?
我会很感激任何指针.我意识到这是非常奇怪的我正在做的事情.
谢谢 :)
有谁知道为什么无论给定的图形状态更新对象有多少注释,它都会将注释限制在25?我有一种感觉它只返回对象的实际注释的"样本".如何在不使用FQL API的情况下强制它完成所有操作?
如何创建具有可自定义按钮选项的模式对话框,就像"拍照或录像"一样 iPhone上的"选择现有"对话框?这些按钮不是普通的UIButton,我确信它们不是为每个应用程序手工制作的.
我2年前写了一个巨大的iPad应用程序,现在我又回到了它并将其升级到iOS5.它有点乱,因为它是我的第一个大型iPad应用程序.
它有一个"同步"步骤可能会持续几分钟,这些是一堆异步方法调用,它们从一个url获取JSON并将它们放入核心数据中.通常,应用程序将冻结(UI无响应).
有什么好的技巧来追踪这种冻结?调试器没有用,因为除非代码在主线程上运行,否则您没有可用的堆栈跟踪.该应用程序通常无法恢复,这表明某种死锁情况.
以下是一个可能有用的特定示例:
一旦我确认它被冻结,我暂停了执行.它似乎每次都冻结在同一条线上 - 一个简单的任务.这里发生了什么?它太令人沮丧了.
此核心数据访问是否导致此问题?任何指针都将非常感激.
编辑2012年6月29日
单击此处查看执行所有创建/更新/删除Core数据对象的类的源代码.我只需要在这个应用程序中停止冻结/崩溃.我知道它一团糟,它也让我感到畏缩.我2年前写的这篇文章几乎没有任何关于Objective-c的知识.我应该重写它,但我必须在2天内让这个工作完全失控.任何人都可以指点一下快速获得线程安全的方法吗?我可以在大中央调度块代码中包装更新NSManagedObjectContext的每个方法吗?
我正在使用uicollectionview上的流布局.这看起来很棒,除了它似乎在另一条线上开始了另一个部分.这似乎是一个合理的默认值,但我如何覆盖它并使这些部分无缝地在同一行上流动,好像没有新的部分开始?
谢谢!
ios uicollectionview uicollectionviewcell uicollectionviewlayout