黑马程序员——OC基础---语法一

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

一、OC简介

OC不是一门全新语言,它是在C语言基础上增加了一层最小的面向对象语法,OC完全兼容C语言,可以在OC代码中混入C语言代码,甚至C++代码,可以使用OC开发mac os x平台和ios平台的应用程序。

二、OC中的关键字

这些都是常用关键字
@interface , @implementation, @end, @public, @protected
@private, @selector, @try, @catch, @throw, @finally, @protocol
@optional, @required, @class, @property, @synthesize, @dynamic
BOOL Class SEL YES NO id self super nil atomic nonatomic retain assign copy block ….
大部分关键字都是以@开头的,但是也有不是@开头的。

三、OC中增加的数据类型

类型描述
BOLL常量值是YES 或者 NO
NSObjict *OC中的对象类型
id动态对象类型,万能指针
SEL选择器数据类型
block代码块数据类型

四、OC的语法

1.头文件

#import<Foundation/Foundation.h>

在oc中用#include也是可以的,它们都是用来拷贝文件的,区别是:import 是include的升级版,import可以自己防止重复拷贝。

2.printf和NSLog的区别

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        printf("hello,world!\n");
        NSLog(@"Hello, World!");
    }
    return 0;
}

输出结果:
这里写图片描述
区别:接收的参数不同,printf接收的是C语言的字符串,NSLog接收的是OC字符串,打印的信息不同,NSLog会自动换行。

3.面向对象的理解
面向对象是相对面向过程来说的。
面向对象和面向过程都是一种思想。
面向过程 强调的是功能行为,关注的是解决问题需要哪些步骤
面向对象 将功能封装进对象,强调具备了功能的对象,关注的是解决问题需要哪些对象。
面向对象是基于面向过程的。

特点:面向对象是符合人们思考习惯的思想,可以将复杂的事情简单化,让我们从执行者变为指挥者。

在我们完成需求时,先要钱找具有所需的功能对象,如果对象不存在,那么创建一个具有所需功能的对象,这样简化了开发并且提高了代码复用。

4.类的定义(先声明一个类,再实现一个类)
先设计一个类
如: 事物名称(类名):人(Person)
属性:身高(height)、年龄(age)
行为(功能):跑(run)、打架(fight)

5.方法定义(先声明一个方法,再实现一个方法)
6.实例化对象
我们用类的方式告诉计算机我们需要一个什么样的对象,之后我们要在程序中使用这个对象,就必须先创建一个对象。
7.消息机制
使用对象调用方法就是OC中的消息机制
示例代码:

#import <Foundation/Foundation.h>
//类的声明
//在@interface @end之间写类的声明,@end是用来结束声明的
//然后声明类的属性,行为
@interface Person : NSObject
{
    //公开成员变量
    @public
    //所有属性必须写在这个括号中
    float _height;//人的身高
    int _age;//人的年龄
}

//OC中的方法声明
//1.对象方法-号开头
//2.数据类型一定要用小括号括住
//3.OC方法中小括号就一个作用,就是括住数据类型
-(void)run;

//当方法有参数的时候必须在参数类型前面加上一个冒号
//冒号也是方法名的一部分
-(void)fight:(char *)gongju;


@end
//类的实现
//主要用来实现声明当中的方法,要说明白方法中要干什么
@implementation Person


//方法的实现
-(void)run
{
    NSLog(@"我在跑");
}

-(void)fight:(char *)gongju
{
    NSLog(@"用%s打架",gongju);
}

@end


int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        /*内存变化
         1。开辟储存空间
         2.初始化成员变量
         3.返回指针地址
         */
        Person *p = [Person new]; //new操作在堆内存中分配存储空间
        //new 一个新对象会再分配一块存储空间
        Person *p1 = [[Person alloc]init];//这种方式也可以,这种方式alloc是创建了一个对象,init是初始化

        //要给对象中的成员变量赋值和结构体一样
        //OC要操作一个对象的属性或行为,必须通过指针操作
        p->_age = 23;
        p->_height = 172;

        p1->_age = 11;
        p1->_height = 123;

        NSLog(@"age=%d,height=%f",p->_age,p->_height);

        //利用对象调用对象方法
        [p run ];
        [p1 fight:"dao"];
    }
    return 0;
}

输出结果:
这里写图片描述

内存图:
这里写图片描述

注意点:
1.不能缺少@end
2.不能把实现写到声明中,声明也不能写到实现中。
3.不能把类的声明实现写到函数中。
4.成员变量必须写到声明的大括号中。
5.声明成员变量不能直接赋值。

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值