我的应用程序中有一些Web服务数据需要每3分钟更新一次.我曾尝试过一些方法,但上周在这里得到了一个非常好的建议,我不应该每隔3分钟建立一个新线程然后尝试dealloc并同步所有不同的部分,以便我避免内存错误.相反,我应该有一个始终在运行的"工作线程",但只在我提出要求时才进行实际工作(每3分钟一次).
正如我的小POC现在一样,我在applicationDidFinishLaunching
方法中生成了一个新线程.我是这样做的:
[NSThread detachNewThreadSelector:@selector(updateModel) toTarget:self withObject:nil];
- (void) updateModel {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
BackgroundUpdate *update = [[BackgroundUpdate alloc] initWithTimerInterval:180];
[update release];
[pool release];
}
Run Code Online (Sandbox Code Playgroud)
好的,这会在"BackgroundUpdate"对象中以更新间隔(以秒为单位).在更新程序内部,它现在就像这样:
@implementation BackgroundUpdate
- (id) initWithTimerInterval:(NSInteger) secondsBetweenUpdates {
if(self = [super init]) {
[NSTimer scheduledTimerWithTimeInterval:secondsBetweenUpdates
target:self
selector:@selector(testIfUpdateNeeded)
userInfo:nil
repeats:YES];
}
return self;
}
- (void) testIfUpdateNeeded {
NSLog(@"Im contemplating an update...");
}
Run Code Online (Sandbox Code Playgroud)
我之前从未使用过这样的线程.我一直都是"设置autoReleasePool,做好工作,让你的autoReleasePool耗尽,再见".
我的问题是,一旦initWithTimerInterval运行NSThread完毕,它就会返回到updateModel方法并将其池耗尽.我想这与NSTimer有自己的线程/ runloop有关吗?我想让线程继续testIfUpdateNeeded每隔3分钟运行一次方法.
那么如何在我的应用程序的整个过程中保持这个NSThread活着?
感谢您给予的任何帮助/建议:)
我是jQuery的新手,我在ready函数中有一段代码需要大约4-5秒才能完成.我想做的是在页面加载时可能使用blockUI来显示"请稍候"消息.但是,如果我在ready函数中插入$ .blockUI和$ .unblockUI,它就会立即运行并消失.如果我把它放在外面,它会破坏IE6.有任何想法吗?我不一定需要使用BlockUI插件,其他任何东西都可以.
谢谢!
编辑:谢谢大家的反馈.我的代码很长,所以我不想在这里发布它,但它基本上构建了一个复选框树,树很长约1000叶.因此,选择已检查的并扩展它们,隐藏未经检查的那些,依此类推等等.我知道我可以尝试更多地优化它,但我想我也很好奇如何做到这一点.所以基本上我没有做任何post,get或ajax调用,我可以将unblock代码附加到它.大多数语句都是选择一些节点并添加/删除一些属性,如hide,show等.
我用yslow做了一些分析,似乎加载时间在被解析的html(~2.5秒)和javascript代码(~2.5)之间划分.在jquery ready函数返回true之前,让我想到是否有一种方法可以在页面加载时立即触发blockUI.
谢谢大家!
再次感谢大家!
请尽可能发送代码帮助我..谢谢提前
IE 8是否有除"开发人员工具栏"以外的任何其他好的附加组件/扩展/插件,这对Web开发人员/设计人员/测试人员有用吗?
我正在使用.Net 3.5和一个最终将成为Windows服务的控制台应用程序.
我找到的大多数例子都使用了类似的东西
Bind<IWeapon>().To<Sword>();
Run Code Online (Sandbox Code Playgroud)
我已将所有DLL作为参考包含在我的项目中,编译器仍在抱怨.我出错的地方有哪些线索?对不起,这可能是一个愚蠢的问题.
更新:只需注意一些似乎需要但未被引用的其他库.有像Castle Core这样的图书馆.这些应该包括在内吗?
通常我点击模拟器上的Wi-Fi设置屏幕Settings > Wireless controls > wifi settings.按下我创建的Wi-Fi按钮时,我需要从我的程序直接进入Wi-Fi设置屏幕.联系人,调用我们可以使用Intent.setData处理的日志(android.provider.contacts ...........).有没有办法从Android程序打开设置子菜单/菜单?
请给我建议或示例代码.
我有一个界面有以下方法签名:
public interface ITag
{
int M_Id { get; set; }
string M_Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有一个实现上面接口的类:
[Table(Name="News")]
public class NewsTag:ITag
{
[Column(Name="id",isPrimaryKey = true)]
public int M_Id
{
get; set;
}
[Column(Name = "name")]
public string M_Name
{
get; set;
}
[Column(Name = "extraField")]
public string M_ExtraField
{
get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
我想从我的数据库中检索行并发送它们
public IQueryable<ITag> fGetNewsTags(int id)
{
var result = from news in context.GetTable<NewsTag>()
where news.M_Id == id
select news;
return (IQueryable<ITag>)result;
}
Run Code Online (Sandbox Code Playgroud)
但问题是即使NewsTag是ITag接口的子类,我尝试使用的转换(返回(IQueryable)结果;)也无法正常工作.
任何帮助,将不胜感激.
iphone ×2
jquery ×2
.net ×1
alloca ×1
android ×1
audit ×1
audit-trail ×1
c# ×1
c++ ×1
casting ×1
css ×1
javascript ×1
linq-to-sql ×1
matplotlib ×1
ninject ×1
nsthread ×1
nstimer ×1
sql ×1
wifi ×1
xhtml ×1