黑马程序员--学习OC中类和对象

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值