OC_01_基础

类和对象是⾯面向对象的核⼼心。
定义类,创建对象,使⽤用对象。
类:具有相同特征和⾏行为的事物的抽象。

     
     

          
          
⾯面向对象编程中使⽤用对象完成程序
开发中:先定义类,再创建对象,然后使⽤用对象。

定义类包含两部分:接⼝口部分(.h)和实现部分(.m)。分开写。

1. 接⼝口部分:对外声明类的特征和⾏行为。(类似于说明书)

2. 实现部分:对内实现⾏行为。(内部的具体实现


接⼝口部分标志:@interface...@end作⽤用:声明类的实例变量和⽅方法,即特征和⾏行为。

包含内容:类名、⽗父类名、实例变量、⽅方法等。


                   
                   

实现部分标志:@implementation...@end作⽤用:实现⽅方法,即实现类的⾏行为。 

类是模板,对象是具体表现,任何对象都要占⽤用内存空间.创建对象分两步:分配内存空间和初始化。

分配内存空间:根据类中声明的实例变量为对象分配内存,将所有实例变量置为默认值0,并返回⾸首地址。

初始化:为对象的实例变量设置初始值。

创建对象:

分配内存空间:Person * p = [Person alloc];

初始化:p = [p init];通常这两部操作需要连写:

Person * p = [[Person alloc] init]; 

+ (id)alloc; +表⽰示这个⽅方法属于类,只能类执⾏行。id返回值类型,表⽰示任意类型的对象,即创建好的对象。

- (id)init; -表⽰示这个⽅方法属于对象,只能对象执⾏行。id返回值类型,表⽰示初始化完成的对象。 

指针存储对象的⾸首地址,代指对象。OC中使⽤用指针代指对象,进⾏行操作。

Person * p = [Person alloc]; 

先执⾏行“=”右侧1. [Person alloc]返回值是对象的⾸首地址,即对象。2. p是跟对象同类型的指针变量,存储对象⾸首地址,代指对象。 



OC的基本类型: 整形 NSInteger(该类型为长整形,输出用%ld), 浮点型: CGFloat, 字符型: NSString(字符型一般都用指针来接收)

NSLog为输出函数,与printf相似,但NSLog能自动换行

.h

#import <Foundation/Foundation.h>

@interface Student : NSObject

// 特征(成员变量)

{

    @public

    //成员变量

    //基本数据类型,比如NSInteger,CGFloat修饰的成员变量不加*

    NSString *_stuName;

    NSInteger _stuAge;

    CGFloat _stuScore;

    NSString *_stuHobby;

    NSString *_stuSex;

}

//行为

//方法的声明

//打招呼

- (void)sayHi;

//

- (void)play;

@end


.m

#import "Student.h"

// .m是实现文件,用来实现方法的

@implementation Student



//打招呼

- (void)sayHi

{

//    NSLog(@"大家好~");

    //方法(行为)的实现

    //打印对象的所有的成员变量

    NSLog(@"%@",_stuName);

    

}


@end


结束

.h文件称为接口文件, .m是实现文件,用来实现方法的,他们都以@end 结束.

Student是当前类的类名

类名和文件名可以不一样,但是为了方便管理,让类名和文件名相同

一个文件里只有一个类(一个文件可以定义多个类,但为了方便管理,只定义一个类)

冒号后面的NSObject是当前类的父类,继承与NSObject 

NSObject为根类,它没有父类,类似于上帝


在main函数里

//        创建对象

//        第一步操作:开辟堆区的内存空间

       Student *stu = [Studentalloc];

       NSLog(@"%p", stu);

//        第二部:进行初始化设置

        stu = [stuinit];

        

//        通常把创建对象的两步和在一起写

       Student *stu = [[Student alloc] init];


 Student继承NSObject,所以Student可以使用NSObject里所有的行为,所以可以直接使用allocinit这两种方法


//访问成员

        stu->_stuName =@"king";

        stu->_stuAge = 23;

       NSLog(@"%@", stu->_stuName);

       NSLog(@"%ld", stu->_stuAge);

//调用方法

        [stusayHi];

        [stuplay];


 //哪个对象来调用sayHi方法,就会打印哪个对象的成员变量的内容

        stu->_stuName =@"king";

        [stusayHi];


在.m文件

//init已在NSObject声明,不用再.h里声明

//重写初始化方法 

- (id)init

{

   _stuName = @"queen";

   _stuAge = 22;

    _stuHobby = @"";

   _stuSex = @"";

   _stuScore = 100;

    return self;//返回自己

}


 @public公开的,public修饰的成员变量谁都可以进行使用

    @protected是被保护的,如果没有指定可见度,默认是被保护的

    他的使用范围被限制在本类和它的子类可以使用

   @private 私有的,只有本类可以使用

    @package是系统内部使用的成员变量,我们在外部不能使用,所以以后看系统的头文件的时候,如果遇见了@package,直接无视



总结:
面向对象和面向过程是两种不同的编程思想,思考⾓角度不同,前者以
对象为中⼼心,后者以事件为中⼼心。
 类是对象的抽象,对象是类的体现。面向对象编程中,先创建出对应
的类,再由类⽣成对象,进⽽完成我们的开发。

类包含接口和实现两个部分,对象创建分两步:创建对象、初始化。public修饰的实例变量,可以直接使用“—>”访问 











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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值