黑马程序员—OC—类方法 && self


*** 类方法 ***
声明和实现:
@interface Person : NSObject
+ (void) age;  //声明一个类方法
@end

@implementation Person
+ (void) age   //类方法的实现
{
NSLog(@"abcd");
}
@end

int main()
{
[Person age];  //通过类名调用类方法
return 0;
}

类方法比对象方法优化体现在不用创建对象就能执行行为。 在内存中, + 识别为类方法直接去类的存储空间中调用方法。 对象方法则需要通过对象指针访问对象通过isa指针访问类空间才能调用到方法。

 

开头的方法 和 - 开头的方法是不同的。 类不能调用对象的方法对象不能调用类的方法。 否则(编译链接可以通过)运行时会报错,找不到相应的类/对象方法。

 

因为类方法和对象方法不同所以可以有同名的类方法和对象方法。

+ (void) test;

- (void) test;

 

注意成员变量也叫实例变量是只有实例(对象)才有的变量类没有成员变量。 在内存中对象里有存储空间存放成员变量的值,类的空间里是没有存放成员变量的地方的所以类没有成员变量的值类方法不能访问成员变量。


类方法的好处: 不依赖于对象执行效率高(能用类方法尽量用类方法)。

使用当方法内部不需要访问成员变量时就可以使用类方法。

下面一个案例为对象跟函数,通过调用函数修改对象的属性值:

#import <Foundation/Foundation.h>


@interface Car : NSObject
{
    @public
    int wheels;
    int  speed;
}

- (void)run;
@end


@implementation Car

- (void)run
{
    NSLog(@"轮子个数为%d,车速为%dkm/s",wheels,speed);
}
@end




void test(Car *newC)
{
    newC->wheels = 4;
    newC->speed = 300;
}

int main()
{
    Car *c = [Car new];
    c->wheels = 5;
    c->speed = 250;
    test(c);
    
    [c run];
    
}



*** 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代表调用该方法的类。

 

------- android培训、ios培训、期待与您交流! ----------

详细请查看:www.itheima.com

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下 4载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值