OC中的类

OC中类

OC中类的定义

在Xcode中创建一个新的类,会自动给你生成两个文件一个是.h另外一个是.m文件,你新创建的类默认继承了NSObject类,因为有一些方法都需要基类中的方法。比如alloc分配内存
OC中用来描述类的使用@interface 类名:父类来进行定义然后用@end来定义类的结束

@interface NsFirst : NSObject{int _age;int _no;
}
- (void )setAge:(int)age;
-(int)getAge;
-(void) setNo:(int) no;
-(int) getNo;
@end

OC中类的实现

跟C++不同的一点,OC中的类的实现并不能和声明放在一起,否则编译会报错。而在C++中虽然强调要分开写,但写到同一个文件中也并不会出错,而在OC中就不是这样
OC中新开一个文件用来进行类的实现,用@implementation 类名开始进行实现,用@end对实现进行结束标记

@implementation NsFirst
-(void )setAge:(int)age{_age = age;
}
-(int)getAge{return _age;
}
-(void)setNo:(int)no{_no = no;
}
-(int)getNo{return _no;
}
@end

类的方法

对于每一个类都有静态方法(对于类的方法)和动态方法(对于对象的方法),C++中调用静态方法用的是类作用域运算符::去进行调用,对于动态方法通过->或者.两个运算法来进行调用
而在OC中调用相应的方法都是通过消息发送,也就是[]这个运算符

//对于上面的类进行相应方法调用
id ns = [[NsFirst alloc] init];
[ns setAge:100];
NSLog(@"age is %i",[ns getAge]);

自定义构造方法

一般我们使用的init方法是编译器默认的一种动态方法,会给对象初始化为0,而有些时候我们需要初始化后进行赋值,所以此时就需要重写init方法
重写init方法

  1. 自己写的init方法名称不能与系统一样
  2. init方法的步骤
    1. 先调用基类构造
    2. 判断是否对象是否创建成功,成功后进行赋值操作
    3. 返回当前对象self
@interface Student : NSObject
@property int age;
@property int no;
//自己写一个构造方法
-(id)initWithAge:(int)age :(int)no;
@end@implementation Student
-(id)initWithAge:(int)age :(int)no{//首先调用super的init的方法 //判断是否初始化成功if(self = [super init]){//赋值self.age = age;self.no = no;}   //返回return self;
}
@end

打印对象信息时的description方法

关于多文件编译

OC中可以有多个.h和.m文件,但入口函数都是main函数,而且OC中没有命名空间,所以两个文件中的类名是可能重名的,所以我们尽可能命名使类名不能出现重名的情况。

点语法

C++中如果定义了对象,可以通过对象名.的方式对对象中属性进行操作,在OC中也提供了这种类似的方式
OC中的点语法要去使用的话,必须要有相应的set方法且set方法设置的属性必须与点语法后的属性名匹配

@interface Person : NSObject{int _age;int _no;
}
//-(void)setAge:(int)age:(int)no;
-(void )setAge:(int)age;
-(void )setNo:(int)No;
-(int)getAge;
-(int)getNo;
@end#import "Person.h"
int main(int argc, const char * argv[]) {@autoreleasepool {// insert code here...Person* p = [[Person alloc] init];p.age = 10;  //这里就相当于调用setAge方法,但注意setAge方法只能对age这一个属性进行操作p.no = 20;
//        [p setAge:10 :20];int age = [p getAge];int no = [p getNo];NSLog(@"age is %i and no is %i",age,no);}return 0;
}

@propety

在写OC中如果给每个属性都写上get和set方法,显得代码太过于冗余,可以使用@propety来定义成员变量,这样编译器就可以自动为我们进行set方法和get方法的声明

  1. @propety = 声明set和get方法
  2. @synthesize = 实现set和get方法
@interface Property : NSObject{int age;int no;float height;
}
@property int age;
//-(void) setage:(int)newAge;
//-(int)age;
@property int  no;
@property float height;
@end@implementation Property@synthesize age;
@synthesize height;
@synthesize no;
@end

如果在有很多的成员变量例如如下情况

@interface Property : NSObject{int age;int age1;int age2;
}

那么使用@propety默认声明与其同名的成员变量的set和get方法
使用@propety声明变量后编译器自动帮助我们声明成员变量,我们就不用再手动声明变量。自动生成的变量为私有的.
@synthesize 实现的成员变量如果没有显示定义,则会隐式创建一个与其名称相同的变量,若是想要其生成的方法是我显示定义的方法,则需指定实现具体的哪个变量

@synthesize age = _age

目前版本中,一但使用@propety声明了变量,编译器会自动帮助我们生成@synthesize,自动帮我们实现
如果我们觉的编译器帮助我们生成的方法并不符合我们的预期,那么我们可以自己实现相应的get方法和set方法,编译器就不会再帮我们实现了,如果我们只想要get或者set两者中的任意一个的话,我们只需要实现其中的任意一个就行,另外一个编译器依旧会帮助我们实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/383042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

装配组件_基于Haption力反馈系统的交互式装配仿真

在一个新工业产品的设计过程中,装配规划是非常重要的任务。如果规划不好将造成很大的资金浪费,致使组件不能正确地集成。例如典型问题:移动一个组件到指定位置但空间不足;使用工具够不到螺丝;操作者没有足够的视域以保…

OC中的基本容器和基本数据类型

基本数据类型 NSRange 是一个结构体,里面有两个数据成员数据类型都为NSUInteger 就是c语言中的无符号整形,一个是location表示集合的起始地址,另外一个变量是length表示从起始地址开始算多少个元素。 NSRange的三种创建方式 //1.NSRange r…

python程序开发总结_python开发总结

两本不错的书:《Python参考手册》:对Python各个标准模块,特性介绍的比较详细。《Python核心编程》:介绍的比较深入,关键是,对Python很多高级特性都有介绍。一个开源代码:openstack,关…

Centos7通过yum安装jsoncpp库

拒绝下载软件包 一堆网上下载安装包,为了编译暗转包又下载插件,是真麻烦 看看有没有jsoncpp的相关库 $ yum list | grep jsoncpp-devel然后执行这两句,就完了 yum install jsoncpp.x86_64 yum install jsoncpp.devel.x86-64多简单

作为唯一索引_Mysql什么情况下不走索引?

本文基于Mysql5.7版本和InnoDB存储引擎。1、InnoDB索引组织表在InnoDB引擎中,表都是按照主键顺序组织存放的,这种存放方式的表称为索引组织表。InnoDB存储引擎中的表,都有主键,如果没有显式声明主键,则采取以下措施&am…

python捕获全局异常统一管理_python中如何用sys.excepthook来对全局异常进行捕获、显示及输出到error日志中...

使用sys.excepthook函数进行全局异常的获取。1. 使用MessageDialog实现异常显示;2. 使用logger把捕获的异常信息输出到日志中;步骤:定义异常处理函数, 并使用该函来替换掉系统的内置处理函数;对于threading.py的异常捕…

r语言系统计算上是奇异的_R语言实现并行计算

Python作为多线程的编程语言在并行方面相对于R语言有很大的优势,然而作为占据统计分析一席之地的R语言自然不能没有并行计算的助力。那么我们来看下在R语言中有哪些并行的包:隐式并行:OpenBLAS,Intel MKL,NVIDIA cuBLA…

cansina 目录_dirmap - 一个高级web目录、文件扫描工具-华盟网

Dirmap一个高级web目录扫描工具,功能将会强于DirBuster、Dirsearch、cansina、御剑需求分析经过大量调研,总结一个优秀的web目录扫描工具至少具备以下功能:并发引擎能使用字典能纯爆破能爬取页面动态生成字典能fuzz扫描自定义请求自定义响应结…

唯有自己变得强大_物竞天择,适者生存,唯有强大自己,方能百毒不侵

物竞天择,适者生存,这是亘古不变的道理。面对生活中的困难,人生路上的挫折,我们只有足够坚强,足够勇敢,足够强大,才能战胜这一切。人活着要明白,你所有的负面,都源于你的…

树莓派c语言运行_树莓派完成简单的编程(四)

在上一篇文章中,我们学习了Vi文本编辑器,那么用它可以实现什么功能呢?树莓派python以及c语言编程这里我选择了最简单和很流行的两种编程语言:C语言和Python。实现最简单的功能,输出hello world。Python编程简介Python是…

mysql 读写引擎_揭秘MySQL存储引擎spider

转自:兴趣部落​buluo.qq.com导读: Spider是为MySQL/MariaDB开发的一个特殊引擎,具有内嵌分片功能。现在它已经被集成到MariaDB10.0及以上版本中,作为MariaDB的一个新的主要性。Spider的主要功能是将数据分散到多个后端节点&#…

python中的与或非_「Python基础」 While 循环语句

Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。其基本形式为:while 判断条件:执行语句……执行语句可以是单个语句或语句块。判断条件可以是任何表达式&…

lamp mysql大小限制_LAMP 调优之:MySQL 服务器调优

关于 MySQL 调优有 3 种方法可以加快 MySQL 服务器的运行速度,效率从低到高依次为:替换有问题的硬件。对 MySQL 进程的设置进行调优。对查询进行优化。替换有问题的硬件通常是我们的第一考虑,主要原因是数据库会占用大量资源。不过这种解决方…

go定时器 每天重复_Go语言学习基础-定时器、计时器

Timer计时器如果希望在将来的某个时间点执行Go代码,或者在某个时间间隔重复执行Go代码,使用Go内置的timer和ticker功能。先看定时器timer,然后再看计时器ticker。定时器代表未来的单个事件。告诉定时器需要等待多长时间,它返回一个…

html类名定义规则_HTML入门笔记1

HTML 是谁发明的?Tim Berners-LeeHTML起手式&#xff1a;HTML起手式 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0&q…

mysql主从虚拟机_虚拟机centos7Mysql实现主从配置

环境搭建在虚拟机上和创建两个一模一样的centos7系统&#xff0c;并安装相同版本的mysql(可以先创建一个再克隆)在master上操作登录mysqlmysql -u root -p使用mysqluse mysql;创建用户CREATE USER lystbc1% IDENTIFIED BY Lys135426tbc;给用户授权GRANT REPLICATION SLAVE ON *…

怎样检测mysql5.5安装成功_64位wiN7系统中装配MySQL5.5.17(测试安装成功哦!)

64位wiN7系统中安装mysql5.5.17(测试安装成功哦&#xff01;&#xff01;~~)下载地址&#xff1a;[url] http://www.mysql.com/downloads/mysql/[/url]下载的话需要登录,你只需按照要求注册一个账号,然后下载即可.我下载的是mysql-5.5.17-winx64.msi版本.安装步骤:Step 1. Mysq…

xcode 创建模拟器_Xcode编译WebKit

下载WebKit源码1)进入https://webkit.org/2)点击页面的 Get Started 进入新页面&#xff0c;如下图所示3)点击 Getting the code 进入新页面&#xff0c;如下图所示4)在源码下载页面&#xff0c;有多种下载方式&#xff0c;包括直接下载代码zip包&#xff0c;通过SVN下载&#…

mysql iscsi_iscsi共享存储的简单配置和应用

1、环境介绍SCSI(Small Computer System Interface)是块数据传输协议&#xff0c;在存储行业广泛应用&#xff0c;是存储设备最基本的标准协议。从根本上说&#xff0c;iSCSI协议是一种利用IP网络来传输潜伏时间短的SCSI数据块的方法&#xff0c;ISCSI使用以太网协议传送SCSI命…

request mysql 接口_TP5接口开发

开启debug调试模式(正式上线建议关闭)config.php// 应用调试模式app_debug > true,设置输出类型index.phpnamespace app\index\controller;class Index{public function index(){$data [name > steven, age > 24];return json([code > 0, msg > 操作成功, data…