天天看点

OC_01_基础

类和对象是⾯面向对象的核⼼心。
定义类,创建对象,使⽤用对象。      
类:具有相同特征和⾏行为的事物的抽象。      
⾯面向对象编程中使⽤用对象完成程序
      
开发中:先定义类,再创建对象,然后使⽤用对象。
      
定义类包含两部分:接⼝口部分(.h)和实现部分(.m)。分开写。 1. 接⼝口部分:对外声明类的特征和⾏行为。(类似于说明书) 2. 实现部分:对内实现⾏行为。(内部的具体实现)  接⼝口部分标志:@[email protected]作⽤用:声明类的实例变量和⽅方法,即特征和⾏行为。 包含内容:类名、⽗父类名、实例变量、⽅方法等。
实现部分标志:@[email protected]作⽤用:实现⽅方法,即实现类的⾏行为。 

                       


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

                           
分配内存空间:根据类中声明的实例变量为对象分配内存,将所有实例变量置为默认值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里所有的行为,所以可以直接使用alloc和init这两种方法

//访问成员

        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修饰的实例变量,可以直接使用“—>”访问