之前我们讲解了第一个OC类, 但还有一些更加细节的东西没有讲解, 下面让我们继续来看看吧~~~
#import <Foundation/Foundation.h> @interface Preson : NSObject { @public int age; double weight; } - (void)walk; @end @implementation Preson - (void)walk { NSLog(@"有一个%d岁的人在走路, 他的体重是%.2f/kg", age, weight); } @end int main() { Preson *p = [Preson new]; p->age = 20; p->weight = 50.5; [p walk]; Preson *p2 = [Preson new]; p2->age = 30; p2->weight = 60.0; [p2 walk]; return 0; }
这里我们详细的分析一下, 看下面的示意图:
我们利用Proson这个类创建了两个对象, 虽然它们有相同的成员变量, 但它们却相互不受影响, 因为它们的地址是互不相同的, 而- (void)walk这个方法是它们所公用的一个方法, 谁去调用它, 那么输出的age和weight就是谁的.
如果我们改一下:
Preson *p = [Preson new]; p->age = 30; Preson *p2 = [Preson new]; p2->weight = 55.5; [p walk]; [p2 walk];
输出的结果是:
2015-01-13 16:12:16.495 a.out[6631:641703] 有一个30岁的人在走路, 他的体重是0.00/kg 2015-01-13 16:12:16.496 a.out[6631:641703] 有一个0岁的人在走路, 他的体重是55.50/kg
再改一下:
Preson *p = [Preson new]; p->age = 30; Preson *p2 = p; p2->weight = 55.5; [p walk]; [p2 walk];
输出的结果是:
2015-01-13 16:13:25.043 a.out[6637:642493] 有一个30岁的人在走路, 他的体重是55.50/kg 2015-01-13 16:13:25.044 a.out[6637:642493] 有一个30岁的人在走路, 他的体重是55.50/kg
如果基础比较好的人肯定知道这是为什么, 不知道也没事, 我们下面来看看示意图:
看完示意图的人应该就知道了, 当p2存了p的地址时, 那么p2改了什么值, p也要跟着改, 因为它们的地址都是一样, 因为它们共用的一样的成员:
2015-01-13 16:19:44.991 a.out[6669:646229] 0x7f93c340e000 0x7f93c340e000
Preson *p = [Preson new]; p->age = 30; p->weight = 60.0; Preson *p2 = [Preson new]; p2->age = 40; p2->weight = 55.5; p = p2; p->age = 20; [p walk];
这个例子也是如此.
好啦, 这次我们就讲到这里了, 下次我们继续~~~~