我最近从Programming Objective C, 4th edition学习了Objective - C。我在阅读部分时有疑问:
myFraction = [Fraction alloc];
myFraction = [myFraction init];
当你发送alloc消息给一个类时,你会得到这个类的一个新实例。alloc方法保证将对象的所有实例变量归零。但是,这并不意味着对象已经被正确初始化以供使用。你需要在分配对象之后初始化它。
再次说明,您在这里使用的方法不是您自己编写的。的Init方法初始化类的实例。请注意将init消息发送给myFraction。也就是说,你想要在这里初始化一个特定的Fraction对象,这样你就不会把它发送到类——您将它发送给类的实例。确保你在继续之前先理解这一点。
所以alloc和init是创建类的每个实例当我发送消息给类或类的实例?我很困惑。我在谷歌上搜索,但结果什么也没找到。我需要你的帮助,让我明白这一点。
我所知道的就是alloc在内存中分配空间所以它实际上不是创建一个新实例,只是给我地址?
一开始你只有一些可用的内存,里面什么都没有。
当您调用alloc
时,其中一些空闲内存将保留给您正在创建的实例使用。完成了一些基本的设置工作来配置实例所属的类的类型。然后你会得到一个指向预留内存位置的指针。
NSObject
),有些则需要。一般来说,在调用init
方法之前,永远不要使用alloc
返回的实例。
调用init
之后,实例就可以使用了。
init
的参数意味着保留和创建的初始实例不是要使用的正确(类)类型。在这种情况下,它将被销毁,并将为您创建一个新的。这在创建NSArray
实例的类集群中非常常见,但是在调用init
之后,您可能会返回NSCFArray
。这就是为什么您总是需要使用从init
调用返回的实例,即使您已经有了从alloc
返回的实例。
通常你不需要担心这个,但你确实需要遵守规则。
所以你总是需要alloc
和init
一个类。
分配意味着你给类"Fraction"一个内存位置。之后,您需要初始化类"Fraction",以便可以使用它。
Fraction *class1 = [[Fraction alloc] init];
Fraction *class2 = [[Fraction alloc] init];
[class1 doSomethingWithClass1];
[class2 doSomethingWithClass2];
稍后您将了解单例。有了它,你可以一次alloc/init一个类,并且总是在不再次alloc/init的情况下使用它。