我只是学习objc语言,所以我的问题很愚蠢,但我仍然非常好奇,我想把一个objc实例指针传递给另一个变种,所以我可以在C中做到这一点
char *astr = malloc(sizeof(char) * 90);
void *copystr = astr;
sprintf(astr, "hello %s", "me");
// insert code here...
NSLog(@"|%s| copy to |%s|", astr, copystr);
但在objc中,它无论如何都不起作用。
NSString *conststr = @"ha!damn!dead!";
//if we pass the pointer to anoter
id *otherSpaceStr = conststr; //this is noway to work
void thirdSpaceStr = conststr; //void won't work too
所以我的问题毕竟是它们都是指针,为什么不能通过它们。
我查看调试窗口,发现它们不仅是指针,它们似乎也有类型
答案 0 :(得分:1)
多数民众赞成因为id
已经是一个指针。来自Apple文档。
typedef struct objc_object *id;
如您所见,id
表示“指针指向任何类型”。这意味着,当您将NSString
分配给otherSpaceStr
(之前为id *
)时,您将其分配给指针指针。
NSString *conststr = @"ha!damn!dead!"; // pointer to NSString
id otherSpaceStr = conststr; // pointer to anything
所以请记住,id
已经是一个指针,并且不需要两个级别的间接(id *
)。