Tag: 客观的

UICollectionView性能 – _updateVisibleCellsNow

我正在处理自定义的UICollectionViewLayout ,它显示按日/周/月组织的单元格。 它不是平滑的滚动,看起来像滞后是由每个渲染循环调用[UICollectionView _updateVisibleCellsNow]引起的。 性能可以<30项,但在100或更多,其速度非常缓慢。 这是UICollectionView和自定义布局的限制,还是我没有给视图足够的信息来正确执行? 来源: https : //github.com/oskarhagberg/calendarcollection 布局: https : //github.com/oskarhagberg/calendarcollection/blob/master/CalendarHeatMap/OHCalendarWeekLayout.m 数据源和委托: https : //github.com/oskarhagberg/calendarcollection/blob/master/CalendarHeatMap/OHCalendarView.m 时间档案: 更新 也许它徒劳? 一些使用UICollectionViewController的普通UICollectionViewController进行一些testing,得到大致相同数量的单元格/屏幕,从而得到类似的时间configuration文件。 我觉得它应该能够同时处理大约100个简单的不透明单元,而没有抖动。 我错了吗?

如何在没有死锁的情况下同步调度主队列?

我需要在主队列上同步分派一个块。 我不知道我目前是在主线程还是不在线。 天真的解决scheme如下所示: dispatch_sync(dispatch_get_main_queue(), block); 但是,如果我目前在主队列中运行一个块,这个调用会造成死锁。 (同步调度等待块完成,但块甚至不开始运行,因为我们正在等待当前的块完成。) 明显的下一步是检查当前队列: if (dispatch_get_current_queue() == dispatch_get_main_queue()) { block(); } else { dispatch_sync(dispatch_get_main_queue(), block); } 这工作,但它是丑陋的。 在我至less把它隐藏在一些自定义函数之前,是不是有更好的解决这个问题的办法? 我强调,我不能asynchronous调度块 – 应用程序处于asynchronous调度块“执行太迟”的情况。

UICollectionView的cellForItemAtIndexPath没有被调用

只有我第二次使用UICollectionView的,也许我咬了更多比我可以咀嚼,但不过: 我正在实现一个UICollectionView(myCollectionView),它使用自定义UICollectionViewCell我已经subclassed。 子类(FullReceiptCell)包含UITableView的和是视图控制器的大小。 我试图让FullReceiptCells之间的水平滚动。 包含myCollectionView的子类UICollectionViewController被推送到导航控制器堆栈。 目前,启用myCollectionView和水平滚动。 但是,没有可见的单元格。 我已经证实了 – (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 已经运行并返回一个大于0的整数。我也确认myCollectionView的委托和数据源在IB中适当地设置为子类UICollectionViewController。 要加载单元格的方法: – (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 没有被调用。 这里是我在该控制器中推送UICollectionViewController和我的viewDidLoad方法的地方(注意:initWithBill是正常初始化程序的覆盖): 在以前的ViewControllers .m文件中: FullReceiptViewController *test = [[FullReceiptViewController alloc] initWithBill:currentBill]; test.title = @"Review"; [self.navigationController pushViewController:test animated:YES]; 在FullReceiptViewController.m中: – (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. [self.myCollectionView […]

比较Objective-C中的版本号

我正在写一个应用程序接收数据的项目和版本号。 数字格式化为“1.0.1”或“1.2.5”。 我怎样才能比较这些版本号? 我认为他们必须首先格式化为string,不是吗? 我有什么select来确定“1.2.5”在“1.0.1”之后?

UICollectionView中的单元格间距

如何在UICollectionView的一部分中设置单元格间距? 我知道有一个属性minimumInteritemSpacing我已经把它设置为5.0仍然没有出现间距5.0。 我已经实现了stream出委托方法。 – (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section { return 5.0; } 我仍然没有得到理想的结果。 我认为它的最小间距。 有没有什么办法可以设置最大间距?

GCD在主线程中执行任务

我有一个可能来自任何线程的callback。 当我得到这个callback,然后我想在主线程上执行一定的任务。 我是否需要检查我是否已经在主线程中 – 或者是否因为不执行此检查而被罚款? dispatch_async(dispatch_get_main_queue(), ^{ // do work here });

如何计算基于文本长度的UILabel宽度?

我想在UILabel旁边显示图像,但是UILabel具有可变的文本长度,所以我不知道在哪里放置图像。 我怎样才能做到这一点?

Grand Central Dispatch中的线程限制解决方法?

使用Grand Central Dispatch ,可以轻松地在非主线程上执行耗时的任务,避免阻塞主线程并保持UI的响应。 只需使用dispatch_async并在全局并发队列上执行任务即可。 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // code }); 然而,这样的事情听起来太好了,而且这样做通常有其不利之处。 在我们的iOS应用项目中,我们使用了很多,最近我们发现它有64个线程的限制。 一旦我们达到极限,应用程序将冻结/挂起。 通过暂停与Xcode的应用程序,我们可以看到主线程是由semaphore_wait_trap举行。 谷歌在网上search确认其他人也遇到这个问题,但迄今没有find解决办法。 调度线程硬限制达到:64(在同步操作中阻塞的调度线程太多) 另一个stackoverflow问题确认使用dispatch_sync和dispatch_barrier_async也会发生此问题。 题: 由于Grand Central Dispatch有64个线程的限制,有没有解决方法? 提前致谢!

暂停GCD查询问题

我无法暂停gcd查询。 下面是一些代码,演示了这个问题: static dispatch_queue_t q=nil; static void test(int a){ if(q){ dispatch_suspend(q); dispatch_release(q); q=nil; } q=dispatch_get_global_queue(0,0); dispatch_async(q,^ { while(1){NSLog(@"query %d",a);sleep(2);} }); } int main(int argc, const char* argv[]){ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; test(1); //blah blah blah test(2); while(1){} [pool release]; return 0; } 我试图做的是挂起,释放和重新初始化查询q时,第二次调用函数testing,但显然我的代码是错误的,并且查询q的两个实例继续运行。 非常感谢您的帮助,谢谢。

在UICollectionViewCell上长按手势

我想知道如何将一个长按手势识别器添加到(的子类)UICollectionView。 我在文档中看到它是默认添加的,但我不知道如何。 我想要做的是:长按一个单元格( 我有一个来自github的日历thingy ),获取哪个单元格,然后用它做东西。 我需要知道什么细胞是压抑的。 对不起,这个广泛的问题,但我找不到任何更好的谷歌或SO