Objective-C基础
Pandakingli
所在地:北京海淀
从事:iOS移动端开发。
邮箱:pandakingli2022@foxmail.com
展开
-
Swift和Objective-C相互调用
1.Swift调用ObjectiveC1.1创建OC类//testObject.h文件#import <Foundation/Foundation.h>NS_ASSUME_NONNULL_BEGIN@interface testObject : NSObject-(void)seyHello;@endNS_ASSUME_NONNULL_END//testO...原创 2020-01-09 16:20:36 · 1665 阅读 · 0 评论 -
面向对象编程-鸵鸟到底是不是鸟?企鹅是不是鸟?
1.什么是里氏替换原则里氏替换原则是由麻省理工学院(MIT)计算机科学实验室的Liskov女士,在1987年的OOPSLA大会上发表的一篇文章《Data Abstraction and Hierarchy》里面提出来的,主要阐述了有关继承的一些原则,也就是什么时候应该使用继承,什么时候不应该使用继承,以及其中的蕴涵的原理。 2002年,我们前面单一职责原则中提到的软件工程大师Robert C. M原创 2017-12-08 20:04:52 · 2827 阅读 · 0 评论 -
iOS开发-OC 中给 nil 发送消息会崩溃吗?为什么?
Objective-C 是以 C 语言为基础的, PC 上,在 C 语言中对空指针进行操作, 程序会由于越界访问而出现保护错进而崩溃。原因需要从源代码中寻找, 下面是 objc_msgSend 的 arm 版汇编代码片段: 在 arm 的函数调用过程中, 一般用 r0-r4 传递参数, 用 r0 传递返回值。 对应 objc_msgSend,第一个参数为 self,返回值也是 self原创 2017-11-10 16:24:55 · 1229 阅读 · 0 评论 -
iOS开发-AutoreleasePool是什么时候销毁的?
在面试中经常会遇到面试官问这样的问题。 AutoreleasePool是什么时候销毁的? 这个问题能回答上来的话,肯定要对AutoreleasePool和RunLoop有所了解才行。AutoreleasePool是在什么时候创建的,又是在什么时候被销毁? 这里我们再简单的回顾一下AutoreleasePool的作用。 AutoreleasePool被称为自动释放池,在释放池中的原创 2017-10-31 13:21:33 · 4165 阅读 · 4 评论 -
iOS标记指针(Tagged Pointer)技术
在2013年9月,苹果推出了iPhone5s,配备了首个采用64位架构的A7双核处理器,为了节省内存和提高执行效率,苹果提出了标记指针(Tagged Pointer) 的概念。对于64位程序,引入Tagged Pointer后,相关逻辑能减少一半的内存占用,以及3倍的访问速度提升,100倍的创建、销毁速度提升。原有的对象为什么会浪费内存?假设我们要存储一个NSNumber对象,其值是一个整数。正常原创 2017-10-29 22:09:07 · 1287 阅读 · 0 评论 -
iOS开发-关于allocWithZone/copyWithZone/NSZone
NSZone可以想象成一个内存池,alloc或是dealloc这些操作,都是在这个内存池中操作的。 Cocoa总是会配置一个默认的NSZone,任何默认的内存操作都是在这个“zone”上操作的。默认的NSZone的缺陷在于,它是全局范围的,时间一长,必然会导致内存的碎片化,如果你需要大量的alloc一些object,那么性能就会受到一些影响。 所有cocoa提供方法,你可以自己生成一个NSZon原创 2017-10-29 20:41:45 · 1012 阅读 · 0 评论 -
Objective-C中的instancetype和id的使用
1、关联返回类型(related result types)的方法根据Cocoa的命名规则,满足下述规则的方法: 1、类方法中,以alloc或new开头 2、实例方法中,以autorelease,init,retain或self开头 会返回一个方法所在类类型的对象,这些方法就被称为是关联返回类型的方法。 换句话说,这些方法的返回结果的类型是 (方法所在的类 的类型)。举个例子:@interf原创 2017-05-09 14:50:04 · 514 阅读 · 0 评论 -
iOS 在Debug下显示log,在Release下屏蔽log输出
OPTIMIZE :用于release和debug的判断,当选择了OPTIMIZE 时,可以让代码在release时执行,在debug时不执行。 示例如下:#ifndef __OPTIMIZE__ //这里是debug模式下 else //这里是release模式下 #endif原创 2017-03-07 07:12:22 · 1986 阅读 · 0 评论 -
iOS 判断字符串中含有特定字符串
代码如下: //判断StringA是否含有 StringB if([StringA rangeOfString:StringB].location !=NSNotFound) { NSLog(@"yes"); } else {原创 2017-02-22 20:16:57 · 1919 阅读 · 0 评论 -
使用炮筒机器人(Automator)来检测内存泄漏-block相关(CheckLeak)
使用炮筒机器人(Automator)来检测内存泄漏-block相关(CheckLeak)在iOS开发中我们经常用到block,无论是GCD还是参数传递,block都是一个很不错的选择。然而有利也有弊,block使用不注意的话会产生循环引用。 global_myAnimation(^{原创 2016-09-29 11:39:25 · 916 阅读 · 0 评论 -
iOS崩溃日志中[__NSSetM addObject:]和[__NSArrayM insertObject:atIndex:]的解决办法
iOS崩溃日志中[__NSSetM addObject:]和[__NSArrayM insertObject:atIndex:]的解决办法[__NSSetM addObject:] object cannot be nil[__NSArrayM insertObject:atIndex:] object cannot be nil使用这两个方法的时候一定要确保object不能是ni原创 2016-09-03 19:11:19 · 6526 阅读 · 0 评论 -
提高XCode的编译链接速度—XCode编译速度慢的解决方案
提高XCode的编译链接速度—XCode编译速度慢的解决方案1. 提高XCode编译时使用的线程数defaults write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 4 XCode默认使用与CPU核数相同的线程来进行编译,但由于编译过程中的IO操作往往比CPU运算要多,因此适当的提升线程数可以在一定程度上加快原创 2016-08-31 14:44:04 · 1517 阅读 · 0 评论 -
Objective-C基础1-类目(Category)和延展(Extension)的区别
Objective-C基础1-类目(Category)和延展(Extension)的区别类目也叫分类,主要作用是为没有源代码的类添加方法。通过类目添加的方法会成为原类的一部分。从而达到扩展一个类的功能。NSString+Addition.h文件#import //类目的接口部分(声明添加的方法)//不能添加实例变量//子类可以继承父类所有的方法,包含Ca原创 2015-12-24 19:36:31 · 938 阅读 · 0 评论