我正在阅读this book,并且它正在进行静态输入,在阅读完一章之后,我理解为:
Foo var
)。id var
)。我知道在Java中你可以强制执行数组中包含的对象类型,例如:ArrayList<Double>
,但是在Objective-C中,我对此做了很少的研究,没有这样的方法因此,所有NSArray
在编译时都包含id
。
如果这个功能(奇怪的称为泛型,即使它是静态类型而非泛型类型)在Objective-C中不可用,那是否意味着有时需要泛型编程?
答案 0 :(得分:1)
是的,无论何时需要编写需要在多种类型上操作的内容而不需要在编译时知道类型,都需要进行泛型输入。
虽然Objective-C本身不包含泛型,但Ids和void *基本上是相同的。您可以编写一个接受void *或Id的方法并对其进行一些处理。在调用该方法之前,您将对要操作的对象上的void *进行显式强制转换。
编辑:例如,如果你想编写一个制作任何类型对象的浅层副本的方法,你会怎么做?你必须做copy(void* src,void* dest, int size)
之类的事情。没有泛型就没有办法做到这一点。