张超超OC基础回顾01_类的创建,申明属性,以及本质

一、 类的声明和实现&规则

1.如何编写类的声明

@interface开头 , 以@end结尾, 然后再class name对应的地方写上 事物名称, 也就是类名即可

注意: 类名的首字符必须大写

声明一个类的目的就是为了告诉系统, 我们这个类中有哪些属性行为

 OC类声明中属性只能在写@interface和@end之间的{}中

注意: 编写OC类属性的时, 建议将所有属性的名称前面都加上"_",这个是规范,记住就行了。

 类名后面的 :NSObject 是为了让我们的Iphone类具备创建对象的能力(继承),也就是说,可以直接用[Iphone new];来创建一个新的对象,不然没有这个new这个类方法,因为new这个方法是存在于NSObject中的。

 @interface Iphone : NSObject

 @end

{
//    注意: 默认情况下, OC对象中的属性是不能直接访问的
    @public  // 只要让类中的属性公开, 以后就可以直接通过一个指向结构体的指针来操作对象中的属性,真实写代码不这么做。
    float _model; // 型号  0
    int _cpu; // cup   0
    double _size; // 尺寸  0
    int _color; // 颜色  0
}

// 对象方法
// 因为OC方法中的()有特殊的用途, OC方法中的()是用来扩住数据类型的,只要有数据类型就得用()来扩住,下面是不待参数,没有返回值的最简单的一个方法,"-"开头的是对象方法,"+"开头的是类方法
- (void)about;
// 有返回值没有参数的, 读取短信,会返回括号类型(字符串)的一个值
- (NSString *)loadMessage;

// 有返回值有参数的, 打电话
// int signal(int number);
// 注意: OC中的方法如果有参数, 那么每个参数的数据类型前面必须加上一个:
// 注意: 当前这个有参数的方法它的方法名称是  signal:
//       冒号也是方法名称的一部分
- (int)signal:(int)number;

// 有返回值并且有多个参数的, 发短信
// int sendMessage(int number, char *content);
// 下面这个方法的方法名称是 sendMessage::
//- (int)sendMessage:(int)number :(char *)content;

// 为了提高我们的阅读性, OC方法允许我们给每个参数添加一个标签来说明当前参数的含义
// 注意: 标签也是方法名的一部分
// 方法名是 sendMessageWithNumber:andContent:
- (int)sendMessageWithNumber:(int)number andContent:(char *)content;
// 类方法
// 如果定义类方法, 类方法的写法和对象方法一模一样, 除了前面的-号不同以外 只需要将对象方法的-号换成+, 那么就定义了一个类方法,类方法的实现效率要比对象方法高,所以如果该方法中没有用到类中的属性(成员变量)建议用类方法来节约性能。
+ (int)sumWithValue1:(int)value1 andValue2:(int)value2;

+ (void)demo;

总结:

注意: 如果声明的是对象方法那么就必须实现对象方法

    如果声明的是类方法那么就必须实现类方法

 类方法和对象方法的区别

 0. 对象方法以-开头

    类方法以+开头

 1. 对象方法必须用对象调用

    类方法必须用类来调用

 2. 对象方法中可以直接访问属性(成员变量)

    类方法中不可以直接访问属性(成员变量)

 3. 类方法和对象方法可以进行相互调用

    4.1对象方法中可以直接调用类方法

    4.2类方法中间接调用对象方法  (注意: 不建议这样使用)

    4.3类方法中可以直接调用其它类方法

    4.4对象方法中可以直接调用对象方法

  类方法的应用场景

 如果方法中没有使用到属性(成员变量), 那么能用类方法就用类方法

 类方法的执行效率比对象方法高

 类方法一般用于定义工具方法:字符串查找,文件操作,数据库操作等等。。。

2.如何编写类的实现

@implementation开头, 以@end结尾, 然后在class对应的地方写上声明时声明的类的名称, 必须和声明的类名一模一样

@implementation Iphone

// 行为的实现,可以对象方法,可以类方法

 

@end

    如何通过一个类来创建对象

    在OC中想要通过一个类来创建一个对象, 必须给类发送一个消息

    如何发送消息?   在OC中只要想要发送消息就先写上 [类名称/对象名称 方法名称];

     只要通过一个类调用类的new方法, 也就是给类发送一个叫做new的消息之后

     系统内部就会做3件事情

     1. 为Iphone类创建出来得对象分配存储空间

     2. 初始化Iphone类创建出来的对象中的属性

     3. 返回Iphone类创建出来的对象对应的地址

    

    通过一个Iphone类型的指针接收了 Iphone对象的地址

    如果使用给一个指针保存了某一个对象的地址, 那么我们就称这个指针位之为某个类型的对象(理解一下这句话)

    利用Iphone类型的指针保存了Iphone对象的地址, 那么我们就称Iphone类型的指针p之为Iphone对象

// 1.创建对象
    // 每次给Iphone类发送一个new消息都会开辟一块新的存储空间
    // 也就意味着每次发送new消息创建出来的对象都是一个新的对象,彼此之间互不干涉的
    Iphone *p = [Iphone new];
    p->_color = kIColorWhite;
    p->_cpu = 1;
    p->_model = 4;
    p->_size = 3.5;
    
    // 2.给对象发送消息
    [p about];

    

    OC中的类其实本质就是一个结构体, 所以p这个指针其实就是指向了一个结构体

   

 struct Person {
     int age;
        char *name;
    };

    struct Person sp;
   struct Person *sip = &sp;

    (*sip).age = 30; // 改变指针只想的结构体中的值

    (*sip).name = "lnj";

    sip->age = 30;

    sip->name = "lnj"
原文地址:https://www.cnblogs.com/XXxiaotaiyang/p/4983543.html