关闭

iOS开发几年了,你清楚OC中的这些东西么

标签: ios
163人阅读 评论(0) 收藏 举报
分类:

前言

几年前笔者是使用Objective-C进行iOS开发, 不过在两年前Apple发布swift的时候,就开始了swift的学习, 在swift1.2发布后就正式并且一直都使用了swift进行iOS的开发了, 之后就是对swift持续不断的学习, 近来swift3.0的发布, 更多的人会选择swift来进行iOS的开发看上去更是成为了一种趋势, 不过一个合格的iOS开发者对oc以及c语言的掌握是必不可少的技能, 本篇中主要是写一些大家平时都可能用到但是不一定知道的oc的东西

  1. oc中的对象的创建: 首先会通过 +(id)alloc 动态的分配所有的变量以及父类定义的变量所需要的足够内存, 同时会清除所有的分配的内存空间, 全部置为0
  2. 同时接着需要调用class的 -(id)init 方法, 这个方法给每个变量设置初始值
  3. 返回的类型为id, id是一个可以指向任意类型的指针(不用 * 号), 这个在一定程度上可以完成多态的效果
  4. 对oc中的class文件的理解: class, extension, category
    ZJPerson.h文件

    111271831-87a54cd20ae2140f
    ZJPerson.m文件

    121271831-7f5232809ed38b81
    ZJPerson.m文件

    131271831-6a512ddcd8fd2374
  5. [[XXObject alloc] init] 初始化方法不需要参数的时候, 和 [XXObject new] 方法相同
  6. 通过字面量来初始化对象, 例如
  7. oc(c)中多行宏的定义(这个在swift…中更方便直接一个全局的函数就搞定了): 在除了最后一行的每一行结尾加一条反斜杠 \
    141271831-12d1f3ca5957ad60
    151271831-7284d8c06f45798b
  8. 比较是否相同: 使用 if(a==b) {}, 如果a,b是对象类型, 那么比较的是指针是否相同, 而不是比较值是否相同, 如果a, b是基本类型(int, double…), 那么比较的是值是否相同; 使用if ([a isEqual: b]) { }, 则比较的是a,b的值是否相同
  9. 初始化基本类型的时候尽量设置初始值, 因为编译器分配的初始值并不确定, 但是对象类型会默认初始化为nil
  10. 条件判断: 当对象不为nil(有内存地址)的时候, 或者基本类型非0, 或者bool类型为true, 这个时候条件都为真, 其他情况条件为假
  11. oc中属性的getter和setter
    @property (nonatomic) NSString *name;

    • 例如当有这样一个name属性的时候, 默认是readWrite的, 编译器会自动生成一个set (setName:)和get(-(NSString *)name)方法, 这个时候可以通过set或者get方法访问到name, 如果申明为(readonly), 那么将只会生成get方法
    • 同时你可以重写name的get(懒加载…)和setter(拦截set方法)…
      对应name属性, 编译器会生成(synthesize)一个 _name 允许我们直接通过指针访问变量, 而不会调用get方法, 所以通过_xx访问的变量不会调用懒加载(get方法), 所以在写懒加载方法的时候, 不能使用self.xx(造成死循环), 而要使用_xx
    • 同时这个synthesize的名字我们是可以自己修改的, 使用如下的语法
      @synthesize name = customName;
    • 那么这个时候就不能通过 __name访问到name了, 因为我们已经指定了通过customName才能访问到了
      NSString *getName = customName;
    • 当然如果, 你是这样写的 @synthesize name;, 并没有指定名字, 这个时候访问的时候就直接使用变量名而不需要加下划线( _ )了 name = @"set name"; 
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

iOS 8种加锁 效率比较

iOS开发中常用的锁有如下几种 来比较一下遇到加锁的情况: 1. @synchronized 关键字加锁  2. NSLock 对象锁  3. NSCondition   4. NSConditio...
  • s3590024
  • s3590024
  • 2016-04-21 10:42
  • 1698

iOS 小心删除Documents中的文件

删除Sandbox中Documents目录下的文件可能是个比较常用的操作,但是如果文件名没有正确设置,就会有删除整个Documents的危险出现,因此在删除前要做好判断。
  • u010962810
  • u010962810
  • 2014-03-15 13:08
  • 2556

ios开发中关于图片缓存的问题整理

先说说缓存机制:   无缓存情况下:   对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的。      上面的情况会...
  • fengpei_fly
  • fengpei_fly
  • 2015-09-08 14:29
  • 3800

iOS开发几年了,你清楚OC中的这些东西么?

无 前言 1.oc中的对象的创建: 首先会通过 +(id)alloc 动态的分配所有的变量以及父类定义的变量所需要的足够内存, 同时会清除所有的分配的内存空间, 全部置为0 2.同时...
  • baidu_33793758
  • baidu_33793758
  • 2016-08-23 11:35
  • 231

IOS开发中的OC

  • 2015-03-10 23:46
  • 72KB
  • 下载

iOS开发中必备的OC知识

  • 2015-12-24 22:47
  • 1.62MB
  • 下载

iOS开发从OC到Swift入门与修炼视频教程

  • 2015-03-16 10:13
  • 4KB
  • 下载

iOS开发练手项目(OC版)

  • 4天前 16:12
  • 28.72MB
  • 下载

c语言Oc语言ios开发java开发spring实战

  • 2014-04-03 10:47
  • 123B
  • 下载

iOS开发笔记--先弄清楚这里的学问,再来谈iOS内存管理与优化(一)

内存有分类吗?什么类型的内存可以回收?当然具有分类 Clean Memory:在闪存中有备份,能够再次读取。主要包括system framework、binary executable of you...
  • hopedark
  • hopedark
  • 2016-03-08 11:15
  • 2484
    个人资料
    • 访问:33535次
    • 积分:509
    • 等级:
    • 排名:千里之外
    • 原创:5篇
    • 转载:78篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论