iOS开发几年了,你清楚OC中的这些东西么
来源:互联网 发布:stm32串口提取数据 编辑:程序博客网 时间:2024/04/28 00:45
原文出处: ZeroJ
前言
几年前笔者是使用Objective-C进行iOS开发, 不过在两年前Apple发布swift的时候,就开始了swift的学习, 在swift1.2发布后就正式并且一直都使用了swift进行iOS的开发了, 之后就是对swift持续不断的学习, 近来swift3.0的发布, 更多的人会选择swift来进行iOS的开发看上去更是成为了一种趋势, 不过一个合格的iOS开发者对oc以及c语言的掌握是必不可少的技能, 本篇中主要是写一些大家平时都可能用到但是不一定知道的oc的东西
- oc中的对象的创建: 首先会通过 +(id)alloc 动态的分配所有的变量以及父类定义的变量所需要的足够内存, 同时会清除所有的分配的内存空间, 全部置为0
- 同时接着需要调用class的 -(id)init 方法, 这个方法给每个变量设置初始值
- 返回的类型为id, id是一个可以指向任意类型的指针(不用 * 号), 这个在一定程度上可以完成
多态
的效果 - 对oc中的class文件的理解: class, extension, category
ZJPerson.h文件
ZJPerson.m文件
ZJPerson.m文件 - [[XXObject alloc] init] 初始化方法不需要参数的时候, 和 [XXObject new] 方法相同
- 通过字面量来初始化对象, 例如12345NSString *string = @"string"; == [[NSString alloc] initWithString:@"string"];等初始化方法NSNumber *myBOOL = @YES; == [[NSNumber alloc] initWithBool:YES];NSNumber *myFloat = @3.14f; ==NSNumber *myInt = @42; ==NSNumber *myLong = @42L; ==...
- oc(c)中多行宏的定义(这个在swift…中更方便直接一个全局的函数就搞定了): 在除了最后一行的每一行结尾加一条反斜杠 \
- 比较是否相同: 使用 if(a==b) {}, 如果a,b是对象类型, 那么比较的是指针是否相同, 而不是比较值是否相同, 如果a, b是基本类型(int, double…), 那么比较的是值是否相同; 使用if ([a isEqual: b]) { }, 则比较的是a,b的值是否相同
- 初始化基本类型的时候尽量设置初始值, 因为编译器分配的初始值并不确定, 但是对象类型会默认初始化为nil
- 条件判断: 当对象不为nil(有内存地址)的时候, 或者基本类型非0, 或者bool类型为true, 这个时候条件都为真, 其他情况条件为假
- oc中属性的getter和setter
@property (nonatomic) NSString *name;
- 例如当有这样一个name属性的时候, 默认是readWrite的, 编译器会自动生成一个set (setName:)和get(-(NSString *)name)方法, 这个时候可以通过set或者get方法访问到name, 如果申明为(readonly), 那么将只会生成get方法12345[self setName:@"set name"];NSString*getName=[selfname];也可以通过点语法访问(实际上是会自动调用set和get方法)self.name=@"set name";NSString*dotName=self.name;
- 同时你可以重写name的get(懒加载…)和setter(拦截set方法)…
对应name属性, 编译器会生成(synthesize)一个 _name 允许我们直接通过指针访问变量, 而不会调用get方法, 所以通过_xx访问的变量不会调用懒加载(get方法), 所以在写懒加载方法的时候, 不能使用self.xx(造成死循环), 而要使用_xx1234567- (NSString *)name {// 这里面不能使用self.name , 因为点语法会调用这个get方法, 造成死循环if (_name == nil) {_name = @"name";}return _name;} - 同时这个synthesize的名字我们是可以自己修改的, 使用如下的语法
@synthesize name = customName;
- 那么这个时候就不能通过 __name访问到name了, 因为我们已经指定了通过customName才能访问到了
NSString *getName = customName;
- 当然如果, 你是这样写的
@synthesize name;
, 并没有指定名字, 这个时候访问的时候就直接使用变量名而不需要加下划线( _ )了name = @"set name";
0 0- iOS开发几年了,你清楚OC中的这些东西么?
- iOS开发几年了,你清楚OC中的这些东西么!!!?
- iOS开发几年了,你清楚OC中的这些东西么
- iOS开发中的这些权限,你搞懂了吗?
- iOS开发中的这些权限,你搞懂了吗?
- iOS 开发中的这些权限,你搞懂了吗?
- iOS开发中的这些权限,你搞懂了吗?
- iOS开发中的这些权限,你搞懂了吗?
- iOS开发中的这些权限,你搞懂了吗?
- iOS开发中的这些权限,你搞懂了吗?
- ArcGis中这些你真的清楚么
- 你工作几年了?
- iOS开发中的这些权限
- iOS开发中的这些权限
- 软件开发过程中这些细节你注意了么?
- 先不要急着埋头码字,这些福利你了解清楚了吗?
- VB 你清楚了吗?
- 我用DW也有几年了,真不知道你说的这些代码是什么?不是快捷键吧?
- md5加密
- 真核基因组注释导读
- 最新版 CocoaPods 的安装流程
- GCD---dispatch_once实现单例模式
- 企业工商,诉讼及备案信息查询
- iOS开发几年了,你清楚OC中的这些东西么
- 蓝鸥Unity开发基础——构造方法
- ios 多线程开发
- 2sum问题经典解答
- Eclipse没有servers视图
- JAVA文件过滤器
- 机器学习&深度学习资料
- [leetcode]129. Sum Root to Leaf Numbers -- JavaScript 代码
- linux双网关设置-原进原出
- 例如当有这样一个name属性的时候, 默认是readWrite的, 编译器会自动生成一个set (setName:)和get(-(NSString *)name)方法, 这个时候可以通过set或者get方法访问到name, 如果申明为(readonly), 那么将只会生成get方法