Tag: multithreading

魔法logging保存在后台

我正在使用魔法logging框架来保存用户设置。 现在,我第一次想把东西保存在后台线程中。 关于魔法logging的github页面是一个我不完全明白的例子: Person *person = …; [MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext){ Person *localPerson = [person MR_inContext:localContext]; localPerson.firstName = @"John"; localPerson.lastName = @"Appleseed"; }]; 为什么需要第一行? 我不能完全创build块中的人? 谢谢!

iOS的CPUconfiguration文件:为什么这个线程可以吮吸99.9%的CPU?

有时,当我加载一个表视图,并且除了让表视图显示之外,我没有任何活动,我会等待几秒钟,然后我的CPU使用率上升。 我怎样才能find原因?

SQLite错误:EXC_BAD_INSTRUCTION(code = EXC_I386_INVOP,subcode = 0x0)-iOS

当我试图插入数据到我的表,有时我得到这个错误,我的应用程序崩溃! 请先解决我的问题。 崩溃日志: Observation(4001,0x10dd67000) malloc: *** error for object 0x7fff3a917100: Non-aligned pointer being freed (2) *** set a breakpoint in malloc_error_break to debug 2016-11-03 11:12:03.063 Observation[4001:46477] Insertion failed ! Printing description of dbpath: (const char *) dbpath = 0x00007fff3b8a5690 "/Users/macbt/Library/Developer/CoreSimulator/Devices/0EEC62AE-6DF0-4FC4-9D30-1EB90CB695A5/data/Containers/Data/Application/A709E729-3162-4CC8-B9FF-2F22A32FC6BD/Documents/ObservationDB.db" Printing description of insertSQL: insert into table_hazard (id, name, modifiedDate) values ("1","Hazard", "03/11/2016 11:12:03 AM") […]

加载UIImagePickerController更快?

我需要加载UIImagePickerController更快。 我的应用程序将从可能的多个控制器调用UIImagePickerController ,并在每个控制器中有两个button,一个用于照片库,另一个用于相机。 这是我的示例应用程序。 我尝试过的一些解决scheme是Apple在“ 并发编程指南 ”中推荐的。 最简单的是当用户按下button时,分配&init实例。 相机出现之前最多可能需要2秒钟的时间。 解决scheme尝试: – (1)我做了一个@property(…)* imagePicker,并在viewDidAppear调用它的alloc&init来使它看起来很stream畅,但是它妨碍了加载其他元素,可能是因为它使用了同一个线程。 在initWithNibName或viewDidLoad使用时会导致较差的结果。 (2) Operation queues …不令人满意的结果。 (3) Dispatch Queues …更好的结果,但仍然明显的波涛汹涌的performance。 (4) performSelectorInBackground:withObject:不是很好的结果。 除非另有build议,否则我不认为我想走向世界。 我没有任何问题,使两个@properties的UIImagePickerController 。 我将继续可能的' 线程编程指南 '。 如果可以的话,请在您的解决scheme中包含任何必要的内存pipe理实践。 谢谢。 – (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; // (1) TRYING OPERATION QUEUES // (a) — NSBlockOperation NSBlockOperation *NSBO_IP = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"before"); imagePicker = [[UIImagePickerController […]

发送一堆请求一个接一个

我需要发送100个networking请求到我的服务器一个接一个,并得到通知,当第100个完成。 我正在使用AFNetworking,正在考虑解决这个问题。 任何人都可以推荐我吗?

在Objective C中设置for循环的最佳方法是什么?

我有一个像这样的循环时间密集的情况: int sum = 0; for (int i = 0; i < max; ++i) sum += dosomething(i); 做something(i)电话是独立的。 这呼吁multithreading。 在双核机器上使用NSOperationQueue,我可以这样做: int __block midpoint; int __block sum1; int __block sum2; midpoint = max/2; sum1 = 0; sum2 = 0; NSOperationQueue *queue = [[NSOperationQueue alloc] init]; NSOperation *operation = [NSBlockOperation blockOperationWithBlock: ^{ for (int i = 0; […]

在单个NSOperationQueue中pipe理多个操作,如暂停/恢复单个操作

在我的代码中,我想单独处理一个队列中的操作,并能够暂停和恢复队列中的操作操作。 我怎样才能实现呢? 让我简单地解释我的问题,我已经使用下面的代码创build子类NSOperation的操作,并将此操作添加到NSOperationQueue。 @interface MyLengthyOperation: NSOperation @end @implementation MyLengthyOperation – (void)main { // a lengthy operation @autoreleasepool { for (int i = 0 ; i < 10000 ; i++) { // is this operation cancelled? if (self.isCancelled) break; NSLog(@"%f", sqrt(i)); } } } @end 我已经创build了上面的操作,我正在调用它 NSOperationQueue *myQueue = [[NSOperationQueue alloc] init]; myQueue.name = @"Download Queue"; […]

使用后台线程导入,保存和显示大型数据集

我跟着Cocoa是我女朋友的教程,这是基于NSOperation一个子类在后台线程中获取和加载大量的logging,但在我的情况下,我有几千条logging,需要1-2分钟的连续从远程Web服务加载。 该应用程序具有使用SudzC生成的Web服务代理类。 没有检测到内存泄漏。 问题发生在应用程序完成加载和保存这个巨大数量的logging到sqlite数据库(使用核心数据)之后,我注意到这个导入/保存操作消耗了这么多的内存,即完成此操作后,我使用的应用程序function的情侣分钟(打开表格视图,写文本等),然后我会看到由于内存不足而发生崩溃,如果我没有包含导入/保存操作的应用程序工作正常,没有任何低内存崩溃! 有没有人有这个问题的线索? 提前致谢。

CoreData与GCD队列中的AFNetworking请求不兼容?

我正在使用GCD启动一个长期运行的后台进程('run_loop'),它创build一个NSManagedObjectContext('MOC'),监视CoreData对象,有时(准备好的时候)将它们的序列化上传到一个Web服务器,然后删除它们。 我正在使用AFNetworking进行HTTP调用。 问题在于请求完成处理程序块,因为这些块在不同的线程中运行,而不是由CoreData支持的MOC所有者。 我已经尝试从GCD run_loop块的开始存储NSThread,并使用performSelector:onThread:run_thread,但这似乎并没有真正调用select器。 我曾尝试使用dispatch_sync(run_queue),但这并不保证线程是一样的,只有GCD队列。 主线程中保存的另一个MOC稍后挂起。 最终,唯一有效的工作是在完成callback处理程序中设置布尔值,并引入额外的逻辑来检测布尔开关,并从主run_loop执行MOC工作。 任何人都可以build议一个更优雅的修复? 或者CoreData与从GCD队列启动的AFNetworking请求不兼容,我应该从头看一下低级的线程控制?

在UITableView上执行GCD

当我创build单元格时,我正在进行一些繁重的计算。 我试图找出保持UITableViewstream体的最佳方式,但是在相同types的背景上进行计算(保持UI线程没有太多的处理)。 仅用于testing目的,我使用这个作为我繁重的计算方法: +(NSString*)bigCalculation { int finalValue=0; int j=0; int i=0; for (i=0; i<1000; i++) { for (j=0; j<10000000; j++) { j++; } finalValue+=j/100*i; } return [NSString stringWithFormat:@"%d",finalValue]; } 在cellForRowAtIndexPath里面,我只做下面的事情: – (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *identifier=@"identifier"; UITableViewCell *cell=nil; cell=[aTableView dequeueReusableCellWithIdentifier:identifier]; if(!cell) { cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier]; } NSString *text=[dataSource objectForKey:[[dataSource allKeys] objectAtIndex:indexPath.row]]; […]