Objective-C 类和对象

面向对象

面向对象(Object-Oriented)是基于面向过程(procedure-oriented)而言的

面向对象 强调对象<指挥者> OC, Java语言就是面向对象

面向过程 强调过程<执行者> C语言就是面向过程

面向对象是一种编程思想 运用对象 类 封装 继承 多态和消息等概念来构造 测试 重构软件

面向对象的特点 A:封装 B:继承 C:多态

面向对象思想的特点 A:它是一种更符合人们思想习惯的思想 B:它使复杂的内容简单化 C:它使我们从执行者变成指挥者

面向对象的优点 符合人们通常的思维方式 从分析到设计再到编码采用一致的模型表示 具有高度连续性 软件重用性好

类和对象

类 对现实世界中事物的描述(成员变量和方法)

对象 现实世界中实际存在具体的个体

示例代码一

#import <Foundation/Foundation.h>

/** 类的声明 **/
@interface Car : NSObject {//大括号内声明成员变量 默认初始化为0(与函数的大括号是不一样的); NSObject: 根类 让Car具备创建对象的能力
    @public//此关键字可以让成员变量被外界访问
    int _age;//成员变量1
    int _height;//成员变量2
}
- (void) run;//对象方法
@end

/** 类的实现 **/
@implementation Car
- (void) run {
    NSLog(@"小车%i岁,%icm,它在跑",_age,_height);
}
@end

/** 主函数 **/
int main() {
    Car *c = [Car new];//创建对象
    c->_age = 10;//设置对象的属性
    c->_height = 180;//设置对象的属性
    
    [c run];//调用对象方法
    return 0;
}

/** 内存分析 **/
//[Car new] 每次都会创建出新的对象 并且返回对象的地址值 那么就应该用一个指针变量保存对象的地址

示例代码二

#import <Foundation/Foundation.h

@interface Person : NSObject {
    @public
    int _age;
    int _height;
}
- (int) test : (int) i;//带参数方法的声明
//- (int) test : (int) i test1 : (int) i1;//多参数方法的声明
@end

@implementation Person
- (int) test : (int) i {//带参数方法的实现
    return i * i;
}
//- (int) test : (int) i test1 : (int) i1 {//多参数方法的实现
//    return i * i1;
//}
@end

int main() {
    Person *p = [Person new];
    int tmp = [p test : 7];//带参数方法的调用
    //int i = [p test : 10 test1 : 9];//多参数方法的调用
    
    NSLog(@"test方法的值是:%i", tmp);
    return 0;
}

/** 注意 **/
//没有@interface 只有@implementation 也可以开发一个类
//同一个类中不允许两个对象方法同名 (:也是方法名的一部分)

/** 方法语法详解 **/
//- (int) test : (int) i;
//方法类型 (方法返回值类型) 方法名 : (参数类型) 参数名;

//[p test : 7]
//[指针变量名 方法名 : 实际参数]


//- (int) test : (int) i test1 : (int) i1;
//方法类型 (方法返回值类型) 方法名 : (参数类型) 参数名 方法名 : (参数类型) 参数名;

//[p test : 10 test1 : 9]
//[指针变量名 方法名 : 实际参数 方法名 : 实际参数]