OC基础 - 01类与对象

一 . 项目创建

(一). 创建步骤

1.打开Xcode,选择如下。
这里写图片描述

2.如图
这里写图片描述

3.如图
这里写图片描述

完成创建,如图
这里写图片描述

(二). main文件的结构
这里写图片描述

1.头文件:#import <Foundation/Foundation.h>

2 . #import:防止重复引用
#include:多次重复编译
@class 一半用在.h文件中防止相互引用,@class告诉编译器将它引用的类只是作为一种类型名,而这个类包含的变量和方法都不会被引入。
如果.m文件需要引用这个类的实体变量或者方法之类的,就在.m中import在@class中声明的类进来。
<>:导入的是系统的库
“”:导入的时自定义的一些文件

3 . @autoreleasepool
这个是自动释放池用于内存管理,详见后章

4.NSLog
NSLog和printf一样,用来打印信息,但他们区别:
(1). NSLog会自己加上换行符
(2). NSLog在Debug下会写到system.log(日志信息)中
(3). NSLog会自动加上时间和进程信息
(4). NSLog支持%@去打印一个对象类型

5 . @:
(1) . 作为OC关键字的起始
(2) . 使用%@可自动调用description方法对该对象进行描述,即打印对象信息
(3) .在iOS5之后,对部分数据类型的简写 比如:@(1) @”” @[] @{}等

二 . 类的创建

创建类的三种方式:
1.可以菜单栏file–new–file
2.选中工程文件,右键newfile
3.command + n

(一). 创建步骤

1.先用command+N创建类,OS X - Source - Cocoa Class。
创建类1

2.Class:类名,首字母必须大(例:Hero);Subclass of:(从父类继承)父类名,NSObject;Lauguage:语言,OC。
[创建类2

确认保存地址后完成创建,此时左侧栏中会有一个Hero.m文件和Hero.h文件。
创建类3

三 . 类的结构

一个类一般由一个.h文件和一个.m文件组成。

(一).声明文件 — “.h​” 文件

在.h文件中,书写此类的成员变量,以及此类的方法声明​。
(1).{ } 内定义类的成员变量
(2).{ }外的下方书写方法的声明
()内写的是该方法返回值的类型,instancetype表示该返回值可以是任意类型,void表示该返回值为空。​

#import <Foundation/Foundation.h>
//接口文件  类名 : 父类命
@interface Hero : NSObject
{
    //创建对象类型变量带*,成员变量名前加_
    NSString *_name;
    NSInteger _age;
    NSString *_gender;
}
@property (nonatomic,copy)NSString *name;//属性,详见后章
/*     -:实例方法(减号方法)
         1.调用方式
         main函数中:[对象 方法名]
         2.格式
         .h文件中:
         - (返回类型)方法名;
         - (返回类型)方法名参数描述名1:(参数类型)参数名;
         - (返回值类型)方法名参数描述名1:(参数类型)参数名 参数描述名2:(参数类型)参数名;
         3.在方法实现中可以使用成员变量*/
- (void)skill;

//自定义init方法
- (instancetype)initWithName:(NSString *)name age:(NSInteger)age gender:(NSString *)gender;

 /*    +:类方法
         1.调用方法
         main 函数中:[类名 方法名]
         2.格式
         同上,- 换成 +
         3.在方法实现中 不 可以使用成员变量*/

//便利构造法
+ (Hero *)heroWithName:(NSString *)name age:(NSInteger)age gender:(NSString *)gender;

@end

(二). 实现文件 — “.m “文件​

在.h文件中声明的方法,需要在.m文件中实现 ,下面将介绍3中初始化方法:

1 . 重写init(-)
重写父类的方法不需要再.h文件中声明,若重写了父类的方法,系统在运行时会优先调用重写的方法。
2 . 自定义init方法(-)
在.h文件中先声明,方法命名要规范,最好以 “initWith…” 来命名。

3 . 便利方法(+)
在.h文件中先声明,方法命名要规范,最好以 “类名With…” 来命名。

#import "Hero.h"
//实现文件.m
@implementation Hero

- (void)skill{   
    NSLog(@"name:%@打怪兽!",_name);  
}

//重写init,直接在.m文件输入init导出索引即可重写
- (instancetype)init{
    self = [super init];//继承父类的init
    if (self) {
        _name = @"lili";
        _age = 33;
        _gender = @"man";
    }
    return self;
}

//自定义init方法
- (instancetype)initWithName:(NSString *)name age:(NSInteger)age gender:(NSString *)gender{
    self = [super init];//同样需要继承父类的init
    if (self) {
        _name = name;
        _age = age;
        _gender = gender;
    }
    return self;
}

//便利构造法
+(Hero *)heroWithName:(NSString *)name age:(NSInteger)age gender:(NSString *)gender{
    Hero *hero = [[Hero alloc]initWithName:name age:age gender:gender];//使用自定义init
    return hero;
}

@end

四 . main函数

与C语言不同的是
字符写法:@”字符”

最后command+R,运行查看打印结果

#import <Foundation/Foundation.h>
#import "Hero.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
#pragma mark - 01对象的创建

        //分配内存空间
        Hero *hero = [Hero alloc];

        //初始化
        hero = [hero init];

        //合并:
        Hero *heroa = [[Hero alloc] init];

        //new初始化 [[Hero alloc] init] = [Hero new];但是new只能调父类的init
        Hero *herob = [Hero new];

        NSLog(@"nameHero = %@, nameHeroa = %@, nameHerob = %@",hero.name,heroa.name,herob.name);//重写init,所以有值,不重写为nil


#pragma mark - 02方法的使用

        //自定义init
        Hero *hero1 = [[Hero alloc] initWithName:@"ki" age:22 gender:@"man"];
        NSLog(@"nameHero1 = %@",hero1.name);

        //便利构造法,使用类方法
        Hero *hero2 = [Hero heroWithName:@"Ahri" age:14 gender:@"woman"];
        NSLog(@"nameHero2 = %@",hero2.name);

        //使用实例方法
        [hero skill];

    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值