除了风格和个人偏好之外,在(1)和(2)之间在Objective-C中声明对象有什么不同吗?
(1)单行声明,分配,初始化。
Student *myStudent = [[Student alloc] init];
(2)多行声明,分配,初始化。
Student *myStudent;
myStudent = [Student alloc];
myStudent = [myStudent init];
答案 0 :(得分:4)
不,没有区别。 [Student alloc]只为指针分配内存,同时[myStudent init]实际上设置了初始值。
如果您熟悉C,请将alloc视为
Student *myStudent = calloc(1, sizeof(Student));
并将init调用作为设置初始值的函数。
答案 1 :(得分:2)
在第二种情况下,您可以多次初始化同一个对象。您向类发送alloc
消息以获取未初始化的实例,然后必须初始化,有多种方法可以执行此操作:
NSString *myStr = [NSString alloc];
NSString *str1 = [myStr init]; //Empty string
NSString *str2 = [myStr initWithFormat:@"%@.%@", parentKeyPath, key];
答案 2 :(得分:2)
不,没有区别。