Snail—OC学习之类及对象
来源:互联网 发布:stm32定时器计算软件 编辑:程序博客网 时间:2024/04/27 19:42
对象是对客观事物的抽象,类是对对象的抽象。类是一种抽象的数据类型
面向对象的编程语言都是有类及对象的
类是由属性及方法组成。
OC中的所有官方类及自定义的类都是NSObject的直接或者间接子类
下面看看类的编写规范
首先,COMMAND+N 新建一个类 Dog类
看到会生成两个文件.h和.m
.h是对属性及方法的声明,.m是对方法实现.
Dog.h文件中编写如下
#import <Foundation/Foundation.h>@interface Dog : NSObject{ //名字的变量 类型是字符串 NSString *_name; //性别暂时用int值代替 1代表公 0代表母 int _sex; }// 前面是+号,即此函数是Dog类的方法 可以直接用Dog类名来调用// 无需创建对象就可以调用,简化代码//另一个作用就是用来创建单例,即在整个生命周期,无论创建多少次都是同一个对象+ (instancetype)sharedDog;// 前面是-号的叫做对象方法//默认的无参构造函数 如果不写 也是会存在的默认构造函数- (instancetype)init;//带一个参数的构造函数- (instancetype)initWithName:(NSString *)name;//带两个参数的构造函数- (instancetype)initWithName:(NSString *)name AndSex:(int)sex;//对象变量name、sex的get及set方法- (void)setName:(NSString *)name;- (NSString *)name;- (void)setSex:(int)sex;- (int)sex;// 狗的一个行为// bark(叫) 返回值为void空,无参- (void)bark;//lookHome(看家)无参- (void)lookHome;@end
Dog.m代码编写如下
#import "Dog.h"@implementation Dog// 由此可见,利用Dog类名来调用这个方法时 无论创建多少次对象都是同一个dog+ (instancetype)sharedDog{ static Dog * dog; if (dog != nil) { dog = [[Dog alloc] init]; } return dog;}//init开头的方法都是初始化构造函数 一种编码规范// init是没有参数的默认写法- (instancetype)init{ if (self = [super init]) { } return self;}//这是具有一个参数的初始化构造函数- (instancetype)initWithName:(NSString *)name{ if (self = [super init]) { _name = name; } return self;}//具有两个参数的构造函数- (instancetype)initWithName:(NSString *)name AndSex:(int)sex{ if (self = [super init]) { _name = name; _sex = sex; } return self;}- (void)setName:(NSString *)name{ _name = name;}- (void)setSex:(int)sex{ _sex = sex;}- (int)sex{ return _sex;}- (NSString *)name{ return _name;}//叫得方法 实现- (void)bark{ //在类的方法中可以访问成员变量,也可以赋值 _name = @"刀刀"; NSLog(@"%@在叫!",_name);}- (void)lookHome{ _sex = 1; NSLog(@"刀刀狗是个%d的",_sex);}@endmain函数引入头文件后创建几个对象
#import <Foundation/Foundation.h>#import "Dog.h"int main(int argc, const char * argv[]){ @autoreleasepool { Dog * dog1 = [Dog sharedDog]; [dog1 setName:@"刀刀"]; [dog1 setSex:1]; //%p可以打印出对象的地址 0x100106800 NSLog(@"%p",dog1); Dog * dog2 = [Dog sharedDog]; //0x100106800 dog2的地址和dog1的地址一样 即是同一个对象 NSLog(@"%p",dog2); //当我们在main函数即相对于Dog类来说的外界函数 我们无法调用self.name的 我们通过set/get来对变量进行赋值或者获取 // alloc 是在堆空间开辟一块空间 然后init初始化对象 Dog * dog3 = [[Dog alloc] init]; //下面赋值可以这样写 dog3.name = @"汪星人"; //原理就是此语句调用的下面这个方法 调用了 -(void)setName:(NSString *)name; [dog3 setName:@"汪星人"]; //下面dog3.name 的作用跟 [dog name]一样 //其实前者这样写的原理就是调用了后者 调用了(NSString *)name方法 NSString * name = dog3.name; NSLog(@"%@",name); //dog3调用直接的bark(叫)的方法 [dog3 bark]; //有参的初始化方法 Dog * dog4 = [[Dog alloc] initWithName:@"大黄" AndSex:8]; NSLog(@"我是%@",dog4.name); } return 0;}
下面,来介绍一个知识点,即property属性修饰
改写一下Dog类
首先,Dog.h中 改写成下面这样
#import <Foundation/Foundation.h>@interface Dog : NSObject{ }@property NSString * name;@property int sex;// 前面是+号,即此函数是Dog类的方法 可以直接用Dog类名来调用// 无需创建对象就可以调用,简化代码//另一个作用就是用来创建单例,即在整个生命周期,无论创建多少次都是同一个对象+ (instancetype)sharedDog;// 前面是-号的叫做对象方法//默认的无参构造函数 如果不写 也是会存在的默认构造函数- (instancetype)init;//带一个参数的构造函数- (instancetype)initWithName:(NSString *)name;//带两个参数的构造函数- (instancetype)initWithName:(NSString *)name AndSex:(int)sex;// 狗的一个行为// bark(叫) 返回值为void空,无参- (void)bark;//lookHome(看家)无参- (void)lookHome;@endDog.m文件中
#import "Dog.h"@implementation Dog// 由此可见,利用Dog类名来调用这个方法时 无论创建多少次对象都是同一个dog+ (instancetype)sharedDog{ static Dog * dog; if (dog == nil) { dog = [[Dog alloc] init]; } return dog;}//init开头的方法都是初始化构造函数 一种编码规范// init是没有参数的默认写法- (instancetype)init{ if (self = [super init]) { } return self;}//这是具有一个参数的初始化构造函数- (instancetype)initWithName:(NSString *)name{ if (self = [super init]) { name = name; } return self;}//具有两个参数的构造函数- (instancetype)initWithName:(NSString *)name AndSex:(int)sex{ if (self = [super init]) { self.name = name; self.sex = sex; } return self;}//叫得方法 实现- (void)bark{ //在类的方法中可以访问成员变量,也可以赋值 self.name = @"刀刀"; NSLog(@"%@在叫!",_name);}- (void)lookHome{ self.sex = 1; NSLog(@"刀刀狗是个%d的",_sex);}@end可以看出来 变量、及变量的get/set方法代码删除后, 利用property来修饰的属性 再执行main.m文件时 没有报错 即property自动为我们生成了set/get方法
这就是一个自定义的类。此类是直接继承于NSObject父类的(@interface Dog : NSObject),下一篇会说继承
一个标准的自定义类就是这样来写,具体遇到问题遇到什么需求可以适当的做些改变
0 0
- Snail—OC学习之类及对象
- Snail—OC学习之类别Category
- oc学习之类与对象
- Snail—OC学习之Hello,World!
- Snail—OC学习之字符串NSString
- Snail—OC学习之数组NSArray
- Snail—OC学习之字典NSDictionary
- Snail—OC学习之选择器SEL
- Snail—OC学习之日期NSDate
- Snail—OC学习之NSNumber
- 黑马程序员—OC学习之类和对象
- 黑马程序员-----OC学习之类与对象
- Snail—OC学习之可变字符串NSMutableString
- Snail—OC学习之可变数组NSMutableArray
- Snail—OC学习之可变字典NSMutableDictionary
- Snail—OC学习之空变量的表示
- Snail—OC学习之文件操作(非读写)
- Snail—OC学习之文件操作(读写)
- HDU 5016 Mart Master II (树上点分治)
- 统计元音
- JS中定义对象方式四: 使用原型(prototype)方式创建对象之一
- Linux/Unix系统编程手册--SOCKET章节读书笔记
- HttpServletRequestWrapper的用法
- Snail—OC学习之类及对象
- 哈希表系列:初探哈希(二),c语言实现
- 多校#2 B
- 第5章面试2--专家打分
- 看看编译器是怎样用乘法代替除法的
- Python操作Mysql实例代码教程
- hdu 5289 Assignment
- dfs算法经典例题
- Android 安卓点击运行后 出错