黑马程序员——Objective-C知识点总结之类和对象
2015-04-26 18:58
579 查看
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流!——
@interface 类名 : NSObject
{
声明成员变量(成员变量不能进行初始化,默认为0);
}
方法的声明
@end
类名\属性的命名规则与标示符的规则的一致,类名的命名需有意义、驼峰标识和首字母大写
例:创建一个车类,拥有两个属性:轮子数、车速,和一个行为:跑
@implementation 类名
方法的实现
@end
类的实现可以在main函数后,只要在声明后边就行
类名 指针变量 = [类名 new];
例:
设置车子对象的属性
跟用指向结构体的指针访问结构体属性一样,用->
注:
1>方法只有声明,没有实现(经典错误)
2>方法没有声明,只有实现(编译器警告,但是能调用,OC的弱语法)
3>编译的时候:访问没有的成员变量直接报错,访问没有的方法,只是警告
方法调用:
[指针变量名 方法名]
2、带一个参数的方法
方法调用:
[指针变量名 方法名:实际参数]
3、带多个参数的方法
方法调用:
[指针变量名 方法名:实际参数]
例:设计一个方法,用来和其他车比较车速,返回车速的差距
运行结果:
a=50
2>对象方法只能用对象来调用
调用格式 : [对象名 对象方法名];
3>对象方法中可以访问当前对象的成员变量
2>类方法只能由类来调用
调用格式:[类名 类方法名];
3>类方法中不能访问实例(成员)变量,因为类方法用类来调用,并没有创建存储空间来存储类中的成员变量。
4>类方法的好处和适用场合:
1)不依赖于对象,执行效率更高;
2)能用类方法解决的问题,尽量使用类方法;
3)场合:当方法内部不需要使用到成员变量时,可以改为类方法。
注意:
1>可以允许类方法和对象方法同名;
2>在对象方法中可以调用类方法;
例:
输出结果:
2015-04-26 22:59:29.342 c006[1066:130334] 这个类叫做Person
2015-04-26 22:59:29.343 c006[1066:130334] 333
2015-04-26 22:59:29.343 c006[1066:130334] 111-0
例:设计一个计算器类,求和、平均值
运行结果:
2015-04-26 23:08:29.508 c006[1081:132063] a=23,b=11
类和对象
定义OC的类和创建OC的对象
要描述OC中的类稍微麻烦一点,分2大步骤:类的声明、类的实现(定义)类的声明
格式:@interface 类名 : NSObject
{
声明成员变量(成员变量不能进行初始化,默认为0);
}
方法的声明
@end
类名\属性的命名规则与标示符的规则的一致,类名的命名需有意义、驼峰标识和首字母大写
例:创建一个车类,拥有两个属性:轮子数、车速,和一个行为:跑
#import <Foundation/Foundation.h> // 类的声明 @interface Car : NSObject // NSObject的目的是让Car类具备创建对象的能力 { @public // @public可以让Car对象的wheels和speed属性被外界访问 int wheels; // 多少个轮子 int speed; // 时速 } - (void)run; // 跑的行为 @end /* 成员变量 @interface的大括号{}中声明的变量:wheels、speed @interface的大括号和函数的大括号是不一样的 默认会初始化为0 */
类的实现
格式:@implementation 类名
方法的实现
@end
@implementation Car - (void) run { NSLog(@"%i个轮子,%i时速的车子跑起来了", wheels, speed); } @end
类的实现可以在main函数后,只要在声明后边就行
对象的创建
格式:类名 指针变量 = [类名 new];
例:
Car *c = [Car new]; // 用一个指针变量c指向内存中的Car对象
设置车子对象的属性
跟用指向结构体的指针访问结构体属性一样,用->
c->wheels = 3; c->speed = 300;
注:
1>方法只有声明,没有实现(经典错误)
2>方法没有声明,只有实现(编译器警告,但是能调用,OC的弱语法)
3>编译的时候:访问没有的成员变量直接报错,访问没有的方法,只是警告
方法
1、不带参数的方法// 方法声明 - (double)pi; // 方法实现 - (double)pi { return 3.14; } // 方法名:pi
方法调用:
[指针变量名 方法名]
[c pi];
2、带一个参数的方法
// 方法声明 - (int)pingFang:(int)num; // 方法实现 - (int)pingFang:(int)num { return num * num; } // OC方法中,一个参数对应一个冒号 // 方法名:pingFang:(冒号也是方法名的一部分)
方法调用:
[指针变量名 方法名:实际参数]
[c pingFang:5];
3、带多个参数的方法
// 方法声明 - (int)sumWithNum1:(int)num1 andNum2:(int)num2; // 方法实现 - (int)sumWithNum1:(int)num1 andNum2:(int)num2 { return num1 + num2; } // 方法名:sumWithNum1:andNum2:
方法调用:
[指针变量名 方法名:实际参数]
[c sumWithNum1:4 andNum2:6];
例:设计一个方法,用来和其他车比较车速,返回车速的差距
#import <Foundation/Foundation.h> // 类的声明 @interface Car : NSObject { @public int speed; } // 声明方法 - (int)compareSpeedWithOther:(Car *)other; @end // 类的实现 @implementation Car - (int)compareSpeedWithOther:(Car *)other { // 返回当前这辆车和other这辆车的速度差距 return speed - other->speed; } @end int main() { // 分别创建两个车对象 Car *c1 = [Car new]; c1->speed = 300; Car *c2 = [Car new]; c2->speed = 250; // 调用方法 int a = [c1 compareSpeedWithOther:c2]; NSLog(@"a=%d", a); return 0; }
运行结果:
a=50
对象方法和类方法
对象方法
1>对象方法以-开头,如 -(void)方法名;2>对象方法只能用对象来调用
调用格式 : [对象名 对象方法名];
3>对象方法中可以访问当前对象的成员变量
类方法
1>类方法以+开头,如+(void)方法名;2>类方法只能由类来调用
调用格式:[类名 类方法名];
3>类方法中不能访问实例(成员)变量,因为类方法用类来调用,并没有创建存储空间来存储类中的成员变量。
4>类方法的好处和适用场合:
1)不依赖于对象,执行效率更高;
2)能用类方法解决的问题,尽量使用类方法;
3)场合:当方法内部不需要使用到成员变量时,可以改为类方法。
注意:
1>可以允许类方法和对象方法同名;
2>在对象方法中可以调用类方法;
例:
#import <Foundation/Foundation.h> @interface Person : NSObject { int age; } // 声明类方法printClassName + (void)printClassName; // 声明对象方法test - (void)test; // 声明类方法test + (void)test; @end @implementation Person // 类方法printClassName的实现 + (void)printClassName { // 实例变量age不能在类方法中访问 //NSLog(@"这个类叫做Person-%d", age); } // 对象方法test的实现 - (void)test { // 可以访问实例变量 NSLog(@"111-%d", age); // 可以在对象方法中调用类方法 //[Person test]; } // 类方法test的实现,可以与对象方法同名 + (void)test { NSLog(@"333"); } @end int main() { // 调用类方法printClassName [Person printClassName]; // 调用类方法test [Person test]; // 调用对象方法test Person *p = [Person new]; [p test]; // 系统会认为现在调用的printClassName是个对象方法,报错 //[p printClassName]; return 0; }
输出结果:
2015-04-26 22:59:29.342 c006[1066:130334] 这个类叫做Person
2015-04-26 22:59:29.343 c006[1066:130334] 333
2015-04-26 22:59:29.343 c006[1066:130334] 111-0
例:设计一个计算器类,求和、平均值
#import <Foundation/Foundation.h> // 工具类:基本没有任何成员变量,里面的方法基本都是类方法 // 方法的声明 @interface JiSuanQi : NSObject + (int)sumOfNum1:(int)num1 andNum2:(int)num2; + (int)averageOfNum1:(int)num1 andNum2:(int)num2; @end // 方法的实现 @implementation JiSuanQi + (int)sumOfNum1:(int)num1 andNum2:(int)num2 { return num1 + num2; } + (int)averageOfNum1:(int)num1 andNum2:(int)num2 { int sum = [JiSuanQi sumOfNum1:num1 andNum2:num2]; return sum / 2; } @end int main() { // 注意用类名调用类方法 int a = [JisuanQi sumOfNum1:10 andNum2:13]; int b = [JiSuanQi averageOfNum1:10 andNum2:12]; NSLog(@"a=%d,b=%d",a,b); return 0; }
运行结果:
2015-04-26 23:08:29.508 c006[1081:132063] a=23,b=11
相关文章推荐
- 黑马程序员_面向对象知识点整理总结
- 黑马程序员--面向对象知识点总结(一)
- 黑马程序员--面向对象知识点总结(二)
- 黑马程序员——JAVA 面向对象知识点总结(三)
- 黑马程序员——Objective-C语言知识点总结之内存管理、Block、Protocol
- 黑马程序员-java面向对象知识点总结
- 黑马程序员——Objective-C语言知识点总结之面向对象
- 黑马程序员——JAVA 面向对象知识点总结(一)
- 黑马程序员——Objective-C语言知识点总结之OC特有语法
- 【黑马程序员】C#面向对象中一些知识点总结和备忘
- 黑马程序员---温习面向对象知识点总结
- 黑马程序员---面向对象及工具类常用API知识点总结
- 黑马程序员——网络编程知识点总结
- 黑马程序员——类与对象的总结
- IOS开发系列--Objective-C之类和对象
- 黑马程序员_C#面向对象总结
- 黑马程序员 常用对象API-- String类、Stringbuffer、StringBuilder总结
- 黑马程序员--学习总结--对象方法摘要
- 黑马程序员----面向对象总结一
- 黑马程序员_C#面向对象学习知识总结1