黑马程序员--学习OC中类和对象
2015-07-31 18:49
417 查看
NSLog函数
NSLog是Cocoa的框架中提供的一个方法NSLogd定义在NSOBjCRuntime.h中
NSLog和Printf的区别
1.NSLog 会自动换行,printf不会自动换行
2.NSLog 会自动输出时间等项目信息,printf不会输出调试信息
3.NSLog 函数的参数是一个NSString对象,printf是一个字符串常量指针
NSLog输出字符串:
NSString *str=@”mymac”;
NSLog(@”%@”,str);
@符号的使用方法
@“” 表示一个字符串
@标示符 OC中大部分的关键字都是以@开头
C与OC学习差异
1.源文件对比C:
.c 源文件
.o 目标文件
.out 可执行文件
.h 头文件
OC:
.h 头文件
.m 源文件
2.基本语法对比
1)C语言数据类型
基本类型、指针类型,空类型void、结构类型、定义类型typedef
2)OC数据类型
基本类型、BLOCK类型、这种数据类型、特殊类型
3)流程控制语句
OC中并没有新增的流程控制
OC中提供一种增强型的for循环
类和对象
1.类(class)和对象(object)类:类是具有相似内部状态和运动规律的实体的集合
对象:现实世界中各种各样的实体
2)类的构成
类名、属性、行为
类的声明和实现
类
.h 类的声明文件
.m 类的实现文件
例如:
//类的声明
@interface Car:NSObject
{ @public
NSString *color;
int speed;
int lunzi;
}
//类的行为
@end
//类的实现
@implementation Car
//行为的具体描述
<#methods#>
@end
方法
方法的声明和实现,都必须以+或者-开头
+ 表示类方法(静态方法)
- 表示对象方法(动态方法)
在.h中声明的所有方法作用域都是public类型,不能更改
成员变量
成员变量的常用作用域有三种
@public 全局都可以访问
@protected 只能在类内部和子类中访问
@private 只能在类内部访问
创建一个对象并访问成员变量
[Car new];
做了3件事
1.开辟存储空间
2.初始化成员变量(写在类声明大括号中的属性就叫成员变量,也叫实例变量)
3.返回指针地址
用Car类实例化了一个实例对象,对象名称是p
Car *p = [Car new];
例:
Car *car1=[Car new]; car1->color=@"blue"; car1->lunzi=4; car1->speed=110; NSLog(@"颜色:%@ 轮子:%d,时速:%d",car1->color,car1->lunzi,car1->speed);
无参方法声明实现及调用
OC中的方法分为:对象方法和类方法:对象方法
(1)对象方法以-开头如 -(void)xx;
(2)对象方法只能由对象来调用
(3)对象方法中可以访问当前对象的成员变量
(4)调用格式 [对象名 对象方法名];
类方法
(1)类方法以+开头 如+(void)put; (2)类方法只能由类来调用
(3)类方法中不能访问实例(成员)变量,因为类方法由类来调用,并没有创建存储空间 来存储类中的成员变量。
(4)调用格式:[类名 类方法名];
(5)类方法的好处和适用场合:
不依赖于对象,执行效率更高;
能用类方法解决的问题,尽量使用类方法;
场合:当方法内部不需要使用到成员变量时,可以改为类方法。
(1)不带参数的方法
声明:

2、方法的调用
使用对象调用方法就是OC中的消息机制 oc语言中采用特定的语言调用类或者实例(对象)的方法称为发送消息或方法调用。 oc中方法的调用有两种:
1)[类名或者对象名 方法名];

不带参数的方法调用:
2)对象名.方法名

有参方法声明实现及调用
声明:调用 :
举例:有参和无参声明实现及调用
#import <Foundation/Foundation.h> //写一个计算器的类 //类名:Caculator //实例变量num1,num2 //行为:+ - * / @interface Caculator : NSObject{ @public int _num1; int _num2; } //无参方法声明 -(int) sum; //有参方法声明 -(int)sum:(int ) x and:(int ) y; @end @implementation Caculator -(int)sum:(int ) x and:(int ) y { return x+y; } -(int) sum{ //计算_num1+_num2 return _num1+_num2; } @end int main(int argc, const char * argv[]) { @autoreleasepool { //创建对象 Caculator *ca=[Caculator new]; //对象访问实例变量 ca->_num1=12; ca->_num2=22; //调用无参方法 int s=[ca sum]; NSLog(@"s=%d",s); //调用有参的方法 s=[ca sum:33 and:33]; NSLog(@"s=%d",s); } return 0; }
相关文章推荐
- 一个简单的asp数据库操作类
- C#实现用于操作wav声音文件的类实例
- 在线管理数据库 类
- Lua面向对象之类和继承浅析
- Lua中类的实现原理探讨(Lua中实现类的方法)
- Lua中的类编程代码实例
- C#常用目录文件操作类实例
- c# 类和成员的修饰详细介绍
- C#中实现判断某个类是否实现了某个接口
- C#类的创建与初始化实例解析
- C#基础语法:结构和类区别详解
- 深入c# 类和结构的区别总结详解
- c#结构和类的相关介绍
- C#中类与结构的区别实例分析
- C#实现读写ini文件类实例
- C#自定义的字符串操作增强类实例
- C#自定读取配置文件类实例
- C++实现不能被继承的类实例分析
- C#生成不重复随机字符串类
- Ruby基础知识之类