标签:style color io ar 使用 strong sp div on
声明和实现:
类方法比对象方法优化体现在不用创建对象就能执行行为。 在内存中, + 识别为类方法, 直接去类的存储空间中调用方法。 对象方法则需要通过对象指针访问对象, 通过isa指针访问类空间, 才能调用到方法。
+ 开头的方法 和 - 开头的方法是不同的。 类不能调用对象的方法, 对象不能调用类的方法。 否则(编译链接可以通过)运行时会报错,找不到相应的类/对象方法。
因为类方法和对象方法不同, 所以可以有同名的类方法和对象方法。
+ (void) test;
- (void) test;
注意: 成员变量也叫实例变量, 是只有实例(对象)才有的变量, 类没有成员变量。 在内存中, 对象里有存储空间存放成员变量的值,类的空间里是没有存放成员变量的地方的, 所以类没有成员变量的值, 类方法不能访问成员变量。
类方法的好处: 不依赖于对象, 执行效率高(能用类方法尽量用类方法)。
使用: 当方法内部不需要访问成员变量时, 就可以使用类方法。
下面一个案例为对象跟函数,通过调用函数修改对象的属性值:
*** self ***
self是个指针, 指向调用它的变量 (可能是类, 也可能是对象)。
self用在方法当中代表方法调用者, 谁调用这个方法, self就代表谁。可以使用self来调用其它类方法或者对象方法。
如果在对象方法里调用该对象的其它方法, 可以使用self来调用:
- (void) bark
{
NSLog(@"Woof!");
}
- (void) barkAndYell
{
[self bark]; // 使用self调用其它对象方法
NSLog(@"Wooooooool");
}
对象方法中的self代表调用该方法的对象, 所以只能调用其它对象方法, 不能调用类方法。
假设已经写了一个求和方法, 在求平均值方法中可以调用求和方法:
+ (int) averageOfNum1:(int)num1 andNum2:(int)num2
{
int sum = [self sumOfNum1:num1 andNum2:num2]; // 使用self调用其它类方法
return sum/2;
}
类方法中的self只能调用其它类方法, 不能调用对象方法, 因为self代表调用该方法的类。
标签:style color io ar 使用 strong sp div on
原文地址:http://www.cnblogs.com/HtercelH/p/4033747.html