OC初体验


OC简介

1.objective-c其实可以简单看成带有附加属性的C语言,下面通过代码展现一个简单的oc程序:

#import<Foundation/Foundation.h>
int main()
{
	NSLog(@"hello ,world");
	return 0;
}

注意的是这个文件应该保存成.m文件,应该区分C语言中以.c后缀。另外需要说明的是oc本质上就是C语言,所以文件的main函数和结尾的return 0语句都是可以按照在C语言中学到过的只是去理解的。

但是毕竟还是一个有区别于C语言的语言,oc中也有一些自己独立的东西,比如在文件开始处的语句——#import<Foundation/Foundation.h>

熟悉C语言的应该清楚,在C语言中我们引入头文件一般使用#include<stdio.h>这种形式,但是在oc中我们一般使用#import<Foundation/Foundation.h>这种方式,因为使用#import<>这种方式可以保证你的头文件在程序运行过程中只被引用一次,不像#include<>那样得设置复杂的基于#ifdef宏命令才能保证头文件只被引用一次。

2.另外我们也注意到了#import<Foundation/Foundation.h>这个语句中包含了一个Foundation/Foundation.h,这个是一个框架,但是何为框架呢?框架就是聚集在一个单元的部件集合,,包括头文件,库,图像,声音文件等。Foudation框架处理的是用户界面之下的层中的特性,另外框架中包含数十甚至上百个头文件,每个框架都有一个主头文件,,它包含了所有框架的各个头文件。如果你想查看foundation包含哪些头文件,可以在/systerm/library/framework/foundation.framework/heades/下查看。

3.NSLog和@

(1)在C语言中你一定使用过printf()函数,在oc中NSLog函数的作用和printf()函数的作用相似,都是控制向控制台输出。另外NSLog函数也可以接收一个字符串作为其一个参数,很多时候NSLog函数可以由printf()函数代替,但是尽量使用NSLog函数,因为NSLog函数添加了一些自己的特性,如:时间戳、日起戳和自动换行。

(2)看到NSLog(@"hello ,world");这个语句我们一般都会怀疑@这个字符,注意这并不是输入出错,而是oc的一些特性,双引号的字符串前加上@表示引用的字符串作为NSString元素来处理。此外在objective-c中几乎所有的关键字都是以@开头。下面列举一些objective-c中常用的关键字:

@interface、@implementation、@end 
@public、@protected、@private、@selector 
@try、@catch、@throw、@finally  
@protocol、@optional、@required、@class
@property、@synthesize、@dynamic
self、super、id、_cmd、__block、__strong、__weak、

这些关键字要做到熟稔于心。

(3)NSString有很多打包的特性,如:

*告知其长度

*将自身与其他字符比较

*将自身转化为整形值或者浮点值

4.BOOL类型

BOOL类型的本质是:

typedef signed char BOOL;

BOOL类型的变量有两种取值:YES,NO。注意书写的时候BOOL,YES,NO是大写。

BOOL小练习:

#import <Foundation/Foundation.h>


BOOL test(BOOL mybool)
{
    return NO;
}

int main()
{
    BOOL b = YES;
    
    BOOL b2 = NO;
    
    BOOL b3 = 1; // YES
    
    BOOL b4 = 0; // NO
    
    
    //NSLog(@"%i", b);
    
    NSLog(@"%d", test(YES));
    return 0;
}

根据上面的例子可以理解一下布尔类型的一些使用规则。

5.常用术语

(1)类是一种结构,它表示对象的类型,对象引用类来获取和本身有关的各种信息,特别是运行什么代码来执行什么操作,

(2)对象是一种结构,它包含值和指向其类的指针,

(3)实例是对象的另一种称呼,

(4)消息是对象可以执行的操作,用于通知对象去做什么。

(5)方法是为响应消息而运行的代码。

类的定义与使用

在oc中类的的定义和其他语言中不一样,他有自己固定的格式,应该包含以下一些信息:

(1)类名

*类名的第一个字母得用大写

*不能有下划线

*如果是多个英文单词,得用驼峰标识法

(2)属性

(3)行为

一般形式为:

@interface Car : NSObject
{// 用来声明对象属性(实例变量\成员变量,默认会初始化为0)
    int wheels; 
    int speed; 
}


// 方法(行为):方法名、参数、返回值(声明、实现)
// 只要是OC对象的方法,必须以减号 - 开头
// OC方法中任何数据类型都必须用小括号()扩住
// OC方法中的小括号():括住数据类型
- (void)run;


@end


// 2.类的实现
// 用来实现@inteface中声明的方法
@implementation Car
// 方法的实现(说清楚方法里面有什么代码)


- (void)run
{
    NSLog(@"车子动起来了");
}


@end

下面我们做一个小练习:

#import<Foundation/Foundation.h>
@interface Person :NSObject
{int _age;
}
- (void)run;
- (void)setAge:(int)age;
- (int)age;
@end

@implementation Person

- (void)run
{
    NSLog(@"%drenpaiqiali",_age);
}
- (void)setAge:(int)age
{
    _age = age;
}
- (int)age
{
    return _age;
}
@end


int main()
{
    Person *p = [[Person alloc] init];
    [p setAge:10];
    [p run];
    return 0;
    
}

运行结果为:


oc中的方法

在oc中对象方法以“-”号开头,并且类型用()括住,类方法用“+”号开头,并且方法的声明和实现应该分开处理,方法的声明定义在类的声明中,并且要在{}号外面,而方法的实现应该在类的实现中。如:
@interface Person :NSObject
{
int _age;// 属性的定义
}
- (int)age;//方法的声明
@end

@implementation Person


- (int)age	//方法的实现
{
    return _age;
}
@end

这个格式一定要严格遵循。
要注意区分oc中方法和函数的区别,函数一般以如下方式定义:
int 函数名(参数列表)
功能语句;
(1)函数的位置一般不固定,可以出现在程序的任何位置,但是不可以写@interface和@end之间,函数属于文件。
(2)函数的调用不依赖于对象。
(3)函数内部不能直接通过成员变量名访问某个对象的成员变量。

匿名对象

在上面的学习中我们一般通过先创建一个对象,然后给这个对象进行成员变量的赋值和进行方法的调用,但是有时候我们也会见到一些特殊的情况,如:

#import<Foundation/Foundation.h>
@interface Car :NSObject
{
int speed;// 属性的定义
}
- (int)run;//方法的声明
@end

@implementation Car


- (int)run	//方法的实现
{
    NSLog(@"速度为%d的车子飞起来",speed);
}
@end
int main();
{
	//19-21行是传统的赋值和调用放法的形式
	//Car c = [Car new];
	//c->speed = 100;
	//[c run];	
	//接下来展示一种不常用的方法——匿名方法
	[Car new]->speed = 300;//给实例变量赋值
	[[Car new] run];	//调用方法
	return 0;
}

运行结果为:


结果之所以是速度为0的车子跑起来了是因为每次执行[Car new]这个语句都会生成一个新的对象,虽然24行执行了给speed赋值的操作,但是接下来有执行了一个[Car new]语句,重新生成了一个新的对象。所以打印了默认的初始值0;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值