Objective c 目标-C(aClassName*)
我是一个自创的程序员,所以我有时会缺少一些基础知识 这就是为什么我不能很好地定义我问题的主题,因为我不知道如何命名它以及它是如何工作的(但我知道答案对你们中的许多人来说似乎微不足道)。当你知道你在寻找什么时,找到答案就容易多了 在objective-c中,我可以看到如下代码行:Objective c 目标-C(aClassName*),objective-c,Objective C,我是一个自创的程序员,所以我有时会缺少一些基础知识 这就是为什么我不能很好地定义我问题的主题,因为我不知道如何命名它以及它是如何工作的(但我知道答案对你们中的许多人来说似乎微不足道)。当你知道你在寻找什么时,找到答案就容易多了 在objective-c中,我可以看到如下代码行: aClassName *myObject = (aClassName *)[NSEntityDescription insertNewObjectForEntityForName:@"aClassName" inMana
aClassName *myObject = (aClassName *)[NSEntityDescription insertNewObjectForEntityForName:@"aClassName" inManagedObjectContext:app.managedObjectContext];
让我烦恼的是(aClass*)部分。这是什么
我知道/感觉它与非常基本的知识有关,但我无法命名,所以我找不到它
我猜(到目前为止我一直是这样使用它的)是用于调用类方法(+),但我不确定,它可能比我所理解的更深刻
感谢您的解释。这是类型转换:
double x = 5.0;
int y = (int)x;
我不知道为什么会出现在您的例子中,据我所知,该方法返回id
,因此不需要强制转换(即使没有它,也不会生成编译器警告)
关于“哪里找到这些信息”:Objul-C/C++是基于C和C++的,因此我建议先学习这些语言的基础知识。 < P>是类型转换:
double x = 5.0;
int y = (int)x;
我不知道为什么会出现在您的例子中,据我所知,该方法返回id
,因此不需要强制转换(即使没有它,也不会生成编译器警告)
关于“哪里找到这些信息”:Objul-C/C++是基于C和C++的,因此我建议先学习这些语言的基础知识。
< P>这是一个演员,在这种情况下是一个下拉式(甚至因为上投是隐性的)。 强制转换是开发人员在编写代码时执行的一种操作,用于提示编译器某个类型比编译器正在考虑的类型窄 考虑以下情况:Class *a = [[Subclass alloc] init];
Subclass *b = a;
(假设子类
是类
的子类)
这将不会编译,因为a
是使用子类中不包含的类型静态定义的。但是赋值不会动态地产生任何问题,因为实际上a
用于存储子类
对象
那你是干什么的?您放置一个cast子类*b=(子类*)a
告诉编译器“信任我并忽略类型检查该赋值,我断言它在运行时是有效的”,然后自动删除编译错误。强制这种行为当然会从代码中删除类型安全性,所以您必须知道自己在做什么
当然,要理解这种情况下强制转换的含义,您至少必须了解继承和对象
在您的特定情况下,
+(id)insertNewObjectForEntityForName:…
方法的返回类型是id
,这是ObjectVec中最不特定的对象类型,如果不像普通的id
那样存储,它总是需要被强制转换为某个对象,在这种情况下是向下转换(即使是因为向上投射是隐式的)
强制转换是开发人员在编写代码时执行的一种操作,用于提示编译器某个类型比编译器正在考虑的类型窄
考虑以下情况:
Class *a = [[Subclass alloc] init];
Subclass *b = a;
(假设子类
是类
的子类)
这不会编译,因为a
静态定义的类型不包含在子类中。但赋值不会动态产生任何问题,因为a
实际上用于存储子类
对象
那么你要做什么呢?你放置一个castSubclass*b=(Subclass*)a;
来告诉编译器“相信我,忽略类型检查这个赋值,我断言它在运行时是有效的”,并自动删除编译错误。强制执行此行为当然会从代码中删除类型安全性,因此您必须知道自己在做什么
当然,要理解这种情况下强制转换的含义,您至少必须了解继承和对象
在您的特定情况下,方法的返回类型为
+(id)insertNewObjectForEntityForName:…
是ObjectVec中最不特定的对象类型,如果它不是像普通的id
那样存储,则总是需要将其强制转换为某个对象,这只意味着将对象强制转换为括号内类的类型,例如,这里我们强制转换Defension UITableViewCell定制单元
CustomeCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell = (CustomeCell*)[[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
…class methode是另一个somthing,它的函数可以调用,而无需定义类的实例…当调用实例方法时,您需要这样做
Class *obj = [Class alloc] init];
[obj funtionName];
在课堂教学法中你就是这样做的
[Class funtionName];
希望这会有所帮助。这仅仅意味着将对象强制转换为括号内类的类型。例如,这里我们将defention UITableViewCell强制转换为CustomCell
CustomeCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell = (CustomeCell*)[[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
…class methode是另一个somthing,它的函数可以调用,而无需定义类的实例…当调用实例方法时,您需要这样做
Class *obj = [Class alloc] init];
[obj funtionName];
在课堂教学法中你就是这样做的
[Class funtionName];
希望这会有帮助。
实际上它会编译,但有警告。Obj-C类型检查比C++更严格。是的,我一般在说。弱类型检查器只是一个坏类型检查器,它们不应该存在。它们确实存在,只是为了帮助开发人员;<代码> ID <代码>不需要强制转换。(这不是因为Obj-C有弱类型检查,而是因为它是动态的。)对不起,我现在没有提到这个警告。。虽然ObjC很实用,但我倾向于在你没有意识到的情况下使用强制转换。。我不会说在任何情况下都不使用它是一个好的实践。要动态分派消息,您需要在任何情况下放松对类型检查器的一些约束,否则您将不被允许。我不是说弱者