OC基础 - 01类与对象

来源:互联网 发布:部落冲突打鱼软件 编辑:程序博客网 时间:2024/06/11 04:14

一 . 项目创建

(一). 创建步骤

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;}
0 0
原创粉丝点击