小编DrG*_*ary的帖子

如何从Xib文件加载自定义UITableViewCells?

问题很简单:如何UITableViewCell从Xib文件加载自定义?这样做允许您使用Interface Builder来设计单元格.由于内存管理问题,答案显然并不简单.这个主题提到了这个问题并建议了一个解决方案,但是在NDA发布之前并且没有代码.这是一个很长的线程,在没有提供明确答案的情况下讨论了这个问题.

这是我用过的一些代码:

static NSString *CellIdentifier = @"MyCellIdentifier";

MyCell *cell = (MyCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil];
    cell = (MyCell *)[nib objectAtIndex:0];
}
Run Code Online (Sandbox Code Playgroud)

要使用此代码,请创建MyCell.m/.h,它是所需组件的新子类UITableViewCell并添加IBOutlets.然后创建一个新的"空XIB"文件.在IB中打开Xib文件,添加一个UITableViewCell对象,将其标识符设置为"MyCellIdentifier",并将其类设置为MyCell并添加组件.最后,连接IBOutlets到组件.请注意,我们没有在IB中设置文件所有者.

如果未通过其他工厂类加载Xib,则其他方法主张设置文件所有者并警告内存泄漏.我在Instruments/Leaks下测试了上面的内容,没有发现内存泄漏.

那么从Xibs加载单元格的规范方法是什么?我们设置文件的所有者吗?我们需要工厂吗?如果是这样,工厂的代码是什么样的?如果有多种解决方案,让我们澄清每种解决方案的优缺点......

cocoa-touch uitableview xib ios

289
推荐指数
10
解决办法
21万
查看次数

实际使用期货?即,如何杀死他们?

期货非常方便,但在实践中,您可能需要对其执行提供一些保证.例如,考虑:

import scala.actors.Futures._

def slowFn(time:Int) = {
    Thread.sleep(time * 1000)
    println("%d second fn done".format(time))
}

val fs = List( future(slowFn(2)), future(slowFn(10)) )
awaitAll(5000, fs:_*)
println("5 second expiration. Continuing.")

Thread.sleep(12000)      // ie more calculations
println("done with everything")
Run Code Online (Sandbox Code Playgroud)

我们的想法是并行启动一些慢速运行的功能.但是如果期货执行的函数没有返回,我们就不想永远挂起.所以我们使用awaitAll()来对期货进行超时.但是如果您运行代码,您会看到5秒计时器到期,但10秒未来继续运行并稍后返回.超时不会杀死未来; 它只是限制了连接等待.

那么你如何在超时后杀死未来?似乎期货不能在实践中使用,除非您确定它们将在已知的时间内返回.否则,您将冒险将线程池中的线程丢失到非终止期货,直到没有剩余.

所以问题是:你如何杀死未来?鉴于这些风险,期货的预期使用模式是什么?

scala

6
推荐指数
1
解决办法
1714
查看次数

Scala不能乘以java双打?

在Scala中使用Java类时,我注意到Scala不能将Java双打倍增.这是一个例子:

scala> val x:java.lang.Double = new java.lang.Double(34.0)
x: java.lang.Double = 34.0

scala> val y:java.lang.Double = new java.lang.Double(2.1) 
y: java.lang.Double = 2.1

scala> x*y
<console>:7: error: value * is not a member of java.lang.Double
       x*y
        ^
Run Code Online (Sandbox Code Playgroud)

哇!我想这是因为Scala运算符只是方法,所以它试图调用Java Double类的multiply方法(即"34.0.*(2.1)").哎呀.有没有一种简单的方法来实现这种互操作?

scala

6
推荐指数
1
解决办法
6967
查看次数

基于Double值对对象进行排序?

分选物体是由序混合,并提供比较()函数,如图足够简单这里.但是如果你的排序值是Double而不是Int呢?

def compare(that:MyClass)= this.x - that.x

其中x是Double将导致编译器错误:"type mismatch; found:Double required:Int"

有没有办法使用双打进行比较而不是投射到Ints?

comparison scala

4
推荐指数
1
解决办法
360
查看次数

如何判断我的viewcontroller是否可见并接受事件?

我有一个观点,我告诉他更新数据时更新.但有时当视图不可见时数据会发生变化.那么如何检测到viewcontroller是可见的并接受事件呢?我可以添加一个在viewWillAppear和viewWillDisappear中更改的布尔值,但似乎应该有一种直接检测状态的方法...

谢谢,加里

iphone

3
推荐指数
1
解决办法
2687
查看次数

标签 统计

scala ×3

cocoa-touch ×1

comparison ×1

ios ×1

iphone ×1

uitableview ×1

xib ×1