我想通过一个例子来了解下面写的行的含义.我无法理解线条的实际含义.这些行来自google的objective-c编码指南.
初始化
不要在init方法中将变量初始化为0或nil; 这是多余的.新分配对象的所有内存初始化为0(isa除外),因此不要通过将变量重新初始化为0或nil来使init方法混乱.
mip*_*adi 92
在引擎盖下,Objective-C对象基本上是C结构.每个都包含一个名为的字段isa
,该字段是指向该对象所属的类的指针(这就是对象和Objective-C运行时如何知道它是什么类型的对象).
关于变量的初始化:在Objective-C中,实例变量自动初始化为0
(对于C类型int
)或nil
(对于Objective-C对象).Apple的指南说,将ivars初始化为init
方法中的那些值是多余的,所以不要这样做.例如,假设您有一个这样的类:
@interface MyClass : NSObject
{
int myInt;
double myDouble;
MyOtherClass *myObj;
}
@end
Run Code Online (Sandbox Code Playgroud)
以init
这种方式编写方法将是多余的,因为这些ivars将被初始化为0
或者nil
无论如何:
@implementation MyClass
- (id)init
{
if ((self = [super init])) {
myInt = 0;
myDouble = 0.0;
myObj = nil;
}
return self;
}
@end
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
@implementation MyClass
- (id)init
{
return [super init];
}
@end
Run Code Online (Sandbox Code Playgroud)
当然,如果您希望将ivars初始化为除0
or 之外的值nil
,您仍应初始化它们:
@implementation MyClass
- (id)init
{
if ((self = [super init])) {
myInit = 10;
myDouble = 100.0;
myObj = [[MyOtherClass alloc] init];
}
return self;
}
@end
Run Code Online (Sandbox Code Playgroud)
dre*_*lax 32
当Objective-C运行时分配对象时,实例变量所在的所有内存都将为您清零,因此无需将实例变量设置为0或nil
.您可以将它们设置为您想要的任何值.一些开发人员甚至忽略冗余并将实例变量设置为0,仅用于显式或描述目的.
isa
意思是"是一个".每个Objective-C对象(包括每个类)都有一个isa
指针.运行时遵循此指针来确定对象是什么类,因此它知道对象响应的选择器,超类是什么,对象具有什么属性等等.
归档时间: |
|
查看次数: |
19919 次 |
最近记录: |