iOS-OC对象模型】的更多相关文章

1.类 1)根类:因为类 NSObject 是层次结构的最顶层,因此称为根类. 可以将类称为子类(subclass)和父类(superclass),也可以将类称为子类和超类. 2)分类/类别(category):允许以模块的方式向现有类定义添加新的方法(默认不能添加实例变量).扩展自己或他人以前实现的类,使它适合自己的需要. 分类的名称括在类名之后的一对圆括号"( )"中. @interface QCStudent (Print) @end @implementation QCStud…
ios+oc面试题     浅复制和深复制的区别?//浅拷贝和深拷贝答案:浅层复制(copy):只复制指向对象的指针,而不复制引用对象本身.//通过对象的指针来访问这个对象深层复制(mutableCopy):复制引用对象本身意思就是有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和A_copy指向的是同一个内存资源,复制的只不过是是一个指针,对象本身资源还是只有一份,那如果我们对A_copy执行了修改操作,那么发现A引用的对象同样被修改,这其实违背了我们复制拷贝的一个思想.深复制…
iOS OC语言原生开发的IM模块,用于项目中需要原生开发IM的情况,具备发送文字.表情.语音.图片.视频等完整功能,包含图片预览视频播放等功能,此项目将会长期更新如有问题可以提出,我的邮箱:fshmjl@aliyun.com,我将尽快解决; 项目地址:https://github.com/fshmjl/RChat 效果图如下 项目介绍 项目中对输入框等模块功能进行了封装,方便复用或重写 输入框模块                  InputBox输入框功能页面            KInp…
原文:http://blog.csdn.net/fanyiyao980404514/article/details/44864663 在C++的内存模型中我们知道,我们通过虚函数列表来存储虚函数的虚拟内存地址,再数据块中加入一个指向虚函数列表的指针变量,通过指针变量来得到虚函数列表,再通过虚函数列表来调用虚函数来实现多态的面向对象的编程功能. 既然OC是面向对象的高级计算机语言.它有一个语言运行时,我们可以动态的判断改实例变量是否拥有该函数.通过运行时来创建对应类的变量,通过运行时来添加成员变量…
1.运行时的使用 向分类中添加属性 // 包含运行时头文件 #import <objc/runtime.h> /* void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy) id objc_getAssociatedObject(id object, const void *key) 参数: object :属性的持有者 key :属性的键值 value…
1.Category 1)分类/类别(category): 允许以模块的方式向现有类定义添加新的方法(默认不能添加实例变量).用以扩展自己或他人以前实现的类,使它适合自己的需要. 分类的名称括在类名之后的一对圆括号 "( )" 中. @interface QCStudent (Print) @end @implementation QCStudent (Print) @end 分类文件名使用符号"+"来分隔类和分类的名字(Xcode 会自动生成). QCStuden…
前言 相对于 Java,OC 语言是一门古老的语言了,而它又是一门不断发展完善的语言.一些新的编译特性,为 OC 语言带来了许多新的活力.在 Xcode7 中,iOS9 的 SDK 已经全面兼容了 Objective-C 的一些新特 性和新功能.这些功能都只作用于编译期,对程序的运行并没有影响,因此,它可以很好的向下进行兼容,无缝的衔接低版本的 iOS 系统,如果可以将这些新特性都应用于开发,开发效率和代码质量,相比之前会有一个很大的提升. 1.可选类型检测 在 swift 语言中,通过 ! 和…
前言 @interface NSKeyedArchiver : NSCoder @interface NSKeyedUnarchiver : NSCoder 在 OC 语言中,归档是一个过程,即用某种格式来保存一个或多个对象,以便以后还原这些对象.通常,这个过程包括将(多个)对象写入文件中,以便以后读取该对象.可以使用归档的方法进行对象的深复制. 采用归档的形式来保存数据,该数据对象需要遵守 NSCoding 协议,并且该对象对应的类必须提供 encodeWithCoder: 和 initWit…
前言 iOS 5.0 之后,提供了新的枚举定义方式,定义枚举的同时,可以指定枚举中数据的类型. typedef NS_OPTIONS(_type, _name) new; -> 位移的,可以使用 按位或 设置数值 typedef NS_ENUM(_type, _name) new; -> 数字的,直接使用枚举设置数值 位移型枚举: 使用 按位或 可以给一个参数同时设置多个 "类型".在具体执行的时候,使用 按位与 可以判断具体的 "类型". OC 中 6…
1.iOS 开发技术体系 iOS 开发技术体系图: 层级 主要框架 Cocoa Touch UIKit 等 Media Core Graphics .OpenGl ES.Core Animation 等 Core Services Core Data.Foundation 等 Core OS Accelerate Framework.External Accessory Framework.Security Framework.System 等 从图中可以看到,要想编写成型的产品,需要的不仅仅是…
1.OC 基本内存管理模型 1.1 自动垃圾收集 在 OC 2.0 中,有一种称为垃圾收集的内存管理形式.通过垃圾收集,系统能够自动监测对象是否拥有其他的对象,当程序执行需要空间的时候,不再被引用的对象会自动释放.iOS 运行环境并不支持垃圾收集,在这个平台开发程序时并没有这方面的选项.在 OS X 10.8 中垃圾收集已不再推荐使用. 1.2 自动释放池 自动释放池(autoreleasepool)的机制是它使得应用在创建新对象时,系统能够有效的管理应用所使用的内存.自动释放池可以追踪需要延时…
1.常见文件扩展名 .c C 语言源文件 .cc..cpp C++ 语言源文件 .m Objective-C 源文件 .mm Objective-C++ 源文件 .h 头文件 .pl Perl 源文件 .o Object(编译后的)文件 .app 可运行的应用程序(相当于 windows 中的 .exe) .dmg OS X 上的光盘文件压缩包(相当于 windows 中的 ISO) .pkg OS X 应用程序安装包(相当于 windows 中的 exe\msi 等) .ipa iOS 应用程…
前言 原创文章,转载请注明出自唐巧的技术博客. 本文主要介绍Objective-C对象模型的实现细节,以及Objective-C语言对象模型中对isa swizzling和method swizzling的支持.希望本文能加深你对Objective-C对象的理解. ISA指针 Objective-C是一门面向对象的编程语言.每一个对象都是一个类的实例.在Objective-C语言的内部,每一个对象都有一个名为isa的指针,指向该对象的类.每一个类描述了一系列它的实例的特点,包括成员变量的列表,成…
1.oc 调用swift /*oc调用swift, project name为DeomOC: 1.oc工程DemoOC中显式创建一个swift文件,生成DemoOC-Bridging-Header.h 2.#import "DemoOC-Swift.h" https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html */ #imp…
简介 这是一个使用OC语言,从0使用纯代码方式开发一个iOS平台,接近企业级商业级的项目(我的云音乐),课程包含了基础内容,高级内容,项目封装,项目重构等知识:主要是讲解如何使用系统功能,流行的第三方框架,第三方服务,完成接近企业级商业级项目,目的是让大家,学到真正的企业级商业级项目开发技术. 效果图 安装环境和创建项目 就是使用Xcode,文档里面就不写了. 如何移出SceneDelegate 为什么要移出 有SceneDelgate不能兼容低于iOS 13以下版本,而企业级项目,例如:目前的…
先来简单介绍一下BlockBlock是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,Block可以在任何时候执行. Block和函数的相似性:(1)可以保存代码(2)有返回值(3)有形参(4)调用方式一样. Block 底层实现 定义一个简单的block   我们再给a赋值为20,此时打印出来a 的值还是10   但当我们在第一次给a 赋值时,前面加上__block 的时候,则打印出来20.   那么为什么加上__block 后 就打印出20了呢,这个原理是什么…
swift 语言出来后,可能新的项目直接使用swift来开发,但可能在过程中会遇到一些情况,某些已用OC写好的类或封装好的模块,不想再在swift 中再写一次,哪就使用混编.这个在IOS8中是允许的. 先中简单的入手,先研究在同一个工程目录下混合使用的情况. 为了演示.先准备两个类 第一个是swift语言写的类,文件名为 act.swift   [cpp] view plaincopy在CODE上查看代码片派生到我的代码片 import Foundation    class Act : NSO…
有时候 ,我们会涉及到双向混合编程,特别是OC和swift的互相引用. swift调用oc的方法: 1.桥接文件,一般是swift工程,在创建一个oc文件时,系统自动添加(不用改名,直接默认即可) 2.将需要引用的oc文件 .h头文件 添加到桥接类中. 如下: 然后在swift调用处,直接就可以使用了. oc调用swift的方法: 1.首先设置一下Packing 进入TARGETS ->Build Settings -> Packaging 中 设置Defines Module为YES 设置…
网上已经有方法了,我这里就是抄了下,原文链接 http://bj007.blog.51cto.com/1701577/649413 http://blog.csdn.net/u010124617/article/details/28856711?utm_source=tuicool 这里的dispatch_once_t就是一个用于标记的整型,没什么特殊之处. 用dispatch_once实现单例的最大好处就是线程安全!!这个经常会被面试问到,建立数据库和网络操作的单例时,确实存在线程安全问题.…
/** * 验证手机号是否正确 * @param unknown_type $mobile */ OC: - (BOOL)isMobileNumber:(NSString *)mobileNum { /** * 手机号码 * 移动:134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188 * 联通:130,131,132,152,155,156,185,186 * 电信:133,1349,153,180,189 */ NSStrin…
inline 在iOS中的一些框架中,static inline是经常出现的关键字组合. static自不用多说,表示在当前文件中应用,如 static A, 在其它文件中也可以出现static A.不会导致重名的错误. inline.内联函数. 作用:替代宏. (如果你在看框架时,看到inline不解,搜索到这篇文章,看到这里可以不用看下面的详述了) 在框架中出现inline时,如YYKit框架.我们稍加观察就会发现它出现在.h文件中. such as: static inline CGFlo…
小哥("我"的自称)个人混编的时候喜欢先创建OC项目,然后在项目中创建swift类.这样有个好处就是桥文件可以自动创建的同事路径不需要我手动去写了,另外还有个目的就是现在小哥自我感觉很多第三方的东西用swift写的不太好找,功能上我还相信用OC写的所以小哥一开始喜欢用OC建项目.(如果你不懂什么是桥文件稍后就知道了).这只是小哥自己的开发习惯和看法. 我新建了一个演示的OC工程,当然你可以使用你已经存在的OC的工程.如果我们想要在OC工程中使用Swift的代码,修改下面的配置:  上面…
1.RunLoop 1)运行循环: 运行循环在 iOS 开发中几乎不用,但是概念的理解却非常重要. 同一个方法中的代码一般都在同一个运行循环中执行,运行循环监听 UI 界面的修改事件,待本次运行循环结束时,统一将界面的修改渲染出来. 点击事件触发结束后立即结束本次运行循环. 作用: 保证程序不退出. 负责监听所有事件,例如:手势触摸,时钟触发,网络加载数据完成等. 特性: 没有事件时,会休眠(省电),一旦监听到事件,会立即响应. 每一个线程都有一个 runloop,但是只有主线程的 runloo…
前言 copy:需要先实现 NSCopying 协议,创建的是不可变副本. mutableCopy:需要实现 NSMutableCopying 协议,创建的是可变副本. 浅拷贝:指针拷贝,源对象和副本指向的是同一个对象.对象的引用计数器 +1,其实相当于做了一次 retain 操作. 深拷贝:内容拷贝,源对象和副本指向的是两个不同的对象.源对象引用计数器不变,副本计数器设置为 1. 只有不可变对象创建不可变副本(copy)才是浅拷贝,其它都是深拷贝. 在 iOS 中并不是所有的对象都支持 cop…
前言 采用 SQLite 数据库来存储数据.SQLite 作为一中小型数据库,应用 iOS 中,跟前三种保存方式相比,相对比较复杂一些. 注意:写入数据库,字符串可以采用 char 方式,而从数据库中取出 char 类型,当 char 类型有表示中文字符时,会出现乱码.这是因为数据库默认使用 ASCII 编码方式.所以要想正确从数据库中取出中文,需要用 NSString 来接收从数据库取出的字符串. sqlite 的方法: sqlite3 *db 数据库句柄,跟文件句柄很类似 sqlite3_s…
前言 直接将数据写在代码里面,不是一种合理的做法.如果数据经常改,就要经常翻开对应的代码进行修改,造成代码扩展性低.因此,可以考虑将经常变的数据放在文件中进行存储,程序启动后从文件中读取最新的数据.如果要变动数据,直接修改数据文件即可,不用修改代码.一般可以使用属性列表文件存储 NSArray 或者 NSDictionary 之类的数据,这种 "属性列表文件" 的扩展名是 plist,因此也称为 "plist 文件". plist 是以 xml 文件形式存储的. 如…
1.Sandbox 沙箱 iOS 为每个应用提供了独立的文件空间,一个应用只能直接访问为本应用分配的文件目录,不可以访问其他目录,每个应用自己独立的访问空间被称为该应用的沙盒.也就是说,一个应用与文件系统的交互绝大部分都被限制在它自己的应用沙盒内. 1)在新 App 被安装时,安装器会为应用创建一系列角色不同的容器(container). iOS 8.0 之后,bundle 目录和沙盒目录 (Data) 是分开的.iOS 7.0 及以前版本 bundle 目录和沙盒目录 (Data) 是在一起的…
前言 @interface NSNull : NSObject <NSCopying, NSSecureCoding> 作为占据空间的一个空值,如用在数组或字典中占据一个没有任何值的空间. NULL & nil 的区别: nil 是 OC 的,空对象,地址指向空的对象,指针地址指向的是 NULL. 在 OC 中,可以给空对象(nil)发送任何消息,不会出现错误. NULL 是 C 的,空地址,地址的数值是 0,是一个长整数. 表示地址是空,不能给 NULL 消息. 从 Xcode 6…
前言 @interface NSTimer : NSObject 作用 在指定的时间执行指定的任务. 每隔一段时间执行指定的任务. 1.定时器的创建 当定时器创建完(不用 scheduled 的,添加到 runloop 中)后,该定时器将在初始化时指定的 ti 秒后自动触发. scheduled 方式: 创建并启动定时器. 默认将时钟以 NSDefaultRunLoopMode 模式添加到运行循环. 发生用户交互的时候,时钟会被暂停. /* + (NSTimer *)scheduledTimer…
前言 NSDate @interface NSDate : NSObject <NSCopying, NSSecureCoding> NSDate 用来表示公历的 GMT 时间(格林威治时间).是独立与任何历法的,它只是时间相对于某个时间点的时间差:NSDate 是进行日历计算的基础. NSDateComponents @interface NSDateComponents : NSObject <NSCopying, NSSecureCoding> NSDateComponent…