GPP*_*GPP 88 types objective-c
我(正在尝试)学习Objective-C,我不断遇到如下的短语:
-(id) init;
Run Code Online (Sandbox Code Playgroud)
我理解的id是一个Objective C语言关键字,但是说"编译器id根据指针类型转换规则专门处理"是什么意思?
是否id自动将对象指定为其指针?
joe*_*ick 111
id是指向任何类型的指针,但不像void *它总是指向Objective-C对象.例如,您可以id向NSArray 添加任何类型的内容,但这些对象必须响应retain和release.
编译器非常乐意为您隐式地转换任何对象id,并为您投射id到任何对象.这与Objective-C中的任何其他隐式转换不同,并且是Cocoa中大多数容器类型的基础.
Fei*_*anZ 23
id是一种通用类型.这意味着编译器将期望任何 对象类型,并且不会强制实施限制.如果您希望在那里使用多个类别的对象,它会很有用; 然后你可以使用内省来找出它是哪个类.id自动假定一个指针,因为Objective-C中的所有对象都作为指针/引用传递.
一些额外的资源:
id vs NSObject vs id*
Objective-C Programming(Wikibooks)
Introspection
Dynamic Typing
小智 9
在java或c#中我们使用这样的
Object data = someValue;
String name =(Object)data;
Run Code Online (Sandbox Code Playgroud)
但在目标c
id data= someValue;
NSString *name= data;
Run Code Online (Sandbox Code Playgroud)
是的,不是.确实id x将x指定为指针,但指出指针类型转换规则适用是错误的,因为"id"具有特殊的类型转换规则.例如,使用void *指针您不能这样做:
void *x;
char *y = x; // error, this needs an explicit cast
Run Code Online (Sandbox Code Playgroud)
相反,它可能与id:
id x;
NSString *y = x;
Run Code Online (Sandbox Code Playgroud)
在Objective c示例中查看更多类型id的用法.
此外,在"现代"目标C中,首选使用instancetype"init"方法而不是"id".在Xcode中甚至还有一个自动转换工具来改变它.阅读关于instancetype:开始使用instancetype而不是id是否有益?
| 归档时间: |
|
| 查看次数: |
57316 次 |
| 最近记录: |