黑马程序员——类方法和关键字self
来源:互联网 发布:mac系统迁移到ssd 编辑:程序博客网 时间:2024/05/16 07:35
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
首先了解下方法的声明和实现:
设计一个计算器类:
只有方法:1、返回PI
2、 计算某个整数的平方
3、计算两个整数的和
#import <Foundation/Foundation.h>@interface JiSuanQi : NSObiect// 方法名叫pi- (double)pi;// 方法名叫pingfang:冒号也是方法名的一部分- (int)pingfang:(int)num;
// oc方法中一个参数对应一个冒号// - (int)sum:(int)num1 :(int)num2; 这样写可以 但一般不这样写,一般写成下面的可读性好- (int)sumWithNum1:(int)num1 andNum2:(int)num2; //方法名 sumWithNum1:andNum2:@end@implementation JiSuanQi- (double)pi{ return 3.14;}- (int)pingfang:(int)num{ return num * num;}
// - (int)sum:(int)num1 :(int)num2 这样写可以 但一般不这样写- (int)sumWithNum1:(int)num1 andNum2:(int)num2{ return num1 + num2;}@endint main(){JiSuanQi *j = [JiSuanQi new]; double a = [j pi];int b = [j pingfang:10]; // int c = [j sum:10 :5]; 这样可读性差int c = [j sumWithNum1:10 andNum2:5]; // 写长一点 可读性好 NSLog(@"%f", a);NSLog(@"%d", b);NSLog(@"%d", c); return 0;}
方法设计练习:设计一个车类型,和其他车比较车速,返回车速车差距
#import <Foundation/Foundation.h>@interface Car : NSObiect{ @public int speed;}- (int)compareSpeedWithOther: (Car *)other;@end@implementation Car- (int)compareSpeedWithOther: (Car *)other{ return speed – other->speed;}@endint main(){ Car *c1 = [Car new];c1->speed = 200;Car *c2 = [Car new];c2->speed = 150;int a = [c1 compareSpeedWithOther:c2];<span style="white-space:pre"></span>
// 也可以反过来调用[c2 compareSpeedWithOther:c1];NSLog(@"车速差距是%d", a);return 0;}
还有匿名对象:
#import <Foundation/Foundation.h>@interface Car : NSObiect{ @public int speed;}- (void)run;@end@implementation Car - (void)run{ NSLog(@"车速是%d", speed);}@endint main(){ /*Car *c = [Car new];c->speed = 300; */
[Car new]->speed = 300; //匿名对象不要写匿名对象的写法,浪费内存,能看懂就行 [[Car new] run]; <span style="white-space:pre"></span>// 运行后速度0 因为每次创建新对象[Car new]都重新分配空间。不合理return 0;}
类方法:
类方法以“+”开头
对象方法:以“-”号开头。 只能由对象调用。能访问成员变量
类方法: 以“+”号开头 。只能由类调用。类方法不能用对象的成员变量
类方法好处 :不依赖于对象,执行效率高。能用类方法就用类方法。当方法内部不适用成员变量时用类方法,可以允许类方法和对象方法同名
#import <Foundation/Foundation.h>@interface Person : NSObject+ (void)printClassName;@end@implementation Person+ (void)printClassName{ NSLog(@"这个类叫做Person");}@endint main(){ [Person printClassName]; // 类方法调用return 0;}
类方法练习:创建计算器类 ,求和 求平均值
工具类:基本没有任何成员变量,里面的方法基本都是类方法
#import <Foundation/Foundation.h>@interface JiSuanQi : NSObject+ (int)sumWithNum1:(int)num1 andNum2:(int)num2;+ (int)averageWithNum1:(int)num1 andNum2:(int)num2;@end
@implementation JiSuanQi+ (int)sumWithNum1:(int)num1 andNum2:(int)num2{ return num1 + num2;}+ (int)averageWithNum1:(int)num1 andNum2:(int)num2{ int sum = [JiSuanQi sumWithNum1:num1 andNum2:num2]; /* 类方法调用类方法:封装 对象方法也可以调用类方法 */
return sum / 2;}@endint main(){ int a = [JiSuanQi sumWithNum1:num1 andNum2:num2];NSLog(@"两个数的和是%d", a);return 0;}
关键字:self (是一个不以@开头的关键字)
self的使用注意:在类方法中使用就指向类, 在对象方法中使用就指向对象,在对象方法中还可以调用成员变量。不能混用
#import <Foundation/Foundation.h>@interface Person : NSObject{ int _age;}- (void)setAge:(int)age;- (int)age;- (void)test;@end@implementation Person- (void)setAge:(int)age{ _age = age; // 也可以写为self->_age; self是一个指向调用此方法对象的指针}- (int)age{ return _age; // 也可以写为renturn self->_age;}- (void)test{ int _age = 20; NSLog(@"Person的年龄是%d", self->_age );<span style="white-space:pre"></span>// 如果将self->_age改为_age,输出年龄为20。这就体现self的用法:访问当前对象的成员变量self->_age}@endint main(){ Person *p = [Person new]; [p setAge:10]; // 将_age值改为10 [p test]; // 输出年龄是10岁。 return 0;}/*self的用法2:方法调用者(和新对象的指针一样)[self 方法名] 可以调用其他对像方法和类方法;例如上面计算器的对象也可以这样用self */
+ (int)averageWithNum1:(int)num1 andNum2:(int)num2{ int sum = [self sumWithNum1:num1 andNum2:num2]; /*类方法调用类方法:封装 对象方法也可以调用类方法*/ return sum / 2;}
建立狗对象,要求调用跑的时候先发出叫声
#import <Foundation/Foundation.h>@interface Dog : NSObject- (void)bark;- (void)run;@end@implementation Dog- (void)bark{ NSLog(@"汪汪汪");}- (void)run{ [self bark]; NSLog(@"跑跑跑");}@endint main(){ Dog *d = [Dog new]; [d run];return 0;}
0 0
- 黑马程序员——类方法和关键字self
- 黑马程序员——类方法与self关键字
- 黑马程序员——OC语言------set和get方法(封装)、类方法、self关键字
- 04.黑马程序员-类方法、self关键字
- 黑马程序员_OC语言之类方法和关键字self
- 黑马程序员- 类方法和self
- 黑马程序员-Object-C封装,和对象.类方法,self关键字的用法总结
- 黑马程序员—OC语言的self关键字和super关键字
- 黑马程序员---关于super和self关键字
- 黑马程序员—OC—类方法 && self
- 黑马程序员——OC之self关键字、多态
- ——黑马程序员——OC中self和super关键字的使用
- 黑马程序员——OC学习——self和super关键字
- 黑马程序员—Java面向对象(类和对象、封装、构造方法、this关键字、static关键字)
- 黑马程序员-OC语言中的两个关键字self和super
- 黑马程序员-OC语言-self和super关键字(听课笔记)
- 黑马程序员_OC基础03_类的方法及self关键字
- 黑马程序员_OC基础03_类的方法及self关键字
- SVN提交报错"Commit blocked by pre-commit hook"的解决办法
- 黑马程序员——Java多线程1
- UVA 10678 The Grazing Cow(椭圆定义)
- itune服务器mp3文件unicode转换
- CentOS 6.4 安装chrome
- 黑马程序员——类方法和关键字self
- 移动开发
- 常见算法在实际项目中的应用
- ubuntu下安装基本开发套件
- 【微软100题】求1+2+…+n
- stl---Deque小结
- selinux 和mysql
- Commons-logging + Log4j入门指南
- 读书札记-2013年12月