Objective C notes
文章平均质量分 75
freeWayWalker
大道至简,知行合一
展开
-
【开发工具】iOS项目工程CI配置
提交日志检查按照语义化的提交日志规范,可以同时对 commit message 和 merge request title 做校验。语义化提交日志规范Git Semantic Commit Messages推荐使用Git Semantic Commit Messages,固定提交日志格式,有助于我们成为一个更好的开发者。格式: (): 其中 是可选的。格式说明:feat: add hat wobble^--^ ^------------^| || +-> S原创 2020-09-18 13:40:35 · 827 阅读 · 0 评论 -
【Effective Objective-C 2.0读书笔记】第一章:熟悉Objective-C
Objective-C通过一套全新语法,在C语言基础上添加了面向对象特性。Objective-C的语法中频繁使用方括号,且不吝于写出极长的方法名。第1条:了解Objective-C语言的起源所有Objective-C语言的对象都必须像这样声明:NSString *someString = @"the string";,因为对象所占内存总是分配在“堆空间”(heap space)中,而绝不会分配在“栈原创 2015-07-21 17:42:06 · 1820 阅读 · 0 评论 -
【iOS架构】iOS应用的生命周期
程序的5种状态如图,iOS应用主要分为5种状态。1 [^2]Not Running (非运行状态)。应用没有运行或被系统终止。Inactive(前台非活动状态)。应用正在进入前台状态,但不能接受事件处理。app可能正在执行其他代码。Active(前台活动状态)。应用进入前台状态,能接受事件处理。Background(后台状态)。应用进入后台后,依然能够执行代码。如果有可执行的代码,就会执行代码,如果原创 2016-07-15 15:59:47 · 1019 阅读 · 0 评论 -
【iOS界面开发】视图开发技巧
iOS触摸事件处理界面响应消息机制分两块,(1)首先在视图的层次结构里找到能响应消息的那个视图。(2)然后在找到的视图里处理消息。寻找响应消息视图过程寻找响应消息视图的过程可以借用M了个J的一张图来说明。处理原理如下:• 当用户点击屏幕时,会产生一个触摸事件,系统会将该事件加入到一个由UIApplication管理的事件队列中• UIApplication会从事件队列中取出最前面的事件进行分发以便处原创 2016-03-13 13:33:15 · 2025 阅读 · 0 评论 -
【iOS界面开发】iOS UIControl事件说明
在UIControl控件事件中,简单解释下下面几个事件。说明:由于是在“iOS 模拟器”中测试的,所以不能用手指,只能用鼠标。1)UIControlEventTouchDown指鼠标左键按下(注:只是“按下”)的动作2)UIControlEventTouchDownRepeat指鼠标左键连续多次重复按下(注:只是“按下”)的动作,比如,鼠标连续双击、三击、……、多次连击。说明:多次重复按下时,事件序原创 2017-02-16 12:40:02 · 1343 阅读 · 0 评论 -
【iOS安全】iOS应用安全开发总结
iOS应用由于其直接运行在手机上,相比运行在服务器的后台服务,更有可能被黑客攻击。本文将从网络安全、本地文件和数据安全、源代码安全三个方面,阐述iOS应用在安全性上遇到的挑战。1一、网络安全安全地传输用户密码对密码进行非对称加密,加盐,且在发送时采用`HTTP Post`的方式。防止通讯协议被轻易破解选择类似`protobuf`(Google提供的一个开源数据交换格式,其最大的特点是基于二进制,因原创 2015-09-25 09:05:03 · 3187 阅读 · 3 评论 -
【iOS界面开发】iOS事件派发机制
app启动时,UIApplicationMain方法会被调用,以创建一个UIApplication单例对象,它负责处理和派发系统发送给app事件队列的事件到合适的接收者。事件来源分为三种:UIControl Actions: these are the actions that are registered using the action/target patternUser events:原创 2017-04-11 03:35:59 · 1251 阅读 · 0 评论 -
【Objective-C基础】集合类
基础集合类是每一个Mac/iOS应用的基本组成部分。 NSArray/NSMutableArray NSSet/NSMutableSet/NSCountedSet NSOrderedSet/NSMutableOrderedSet NSIndexSet/ NSDictionary/NSMutableDictionary NSPointerArray原创 2017-03-03 10:57:42 · 1845 阅读 · 0 评论 -
【Objective-C Runtime】类和对象的数据结构和消息传递机制
类与对象基础数据结构ClassObjective-C类是由Class类型来表示的,它实际上是一个指向objc_class结构体的指针。它的定义如下:1typedef struct objc_class *Class;查看objc/runtime.h中objc_class结构体的定义如下:struct objc_class { Class isa OBJC_ISA_AVAILABILITY;原创 2017-03-31 22:37:14 · 1135 阅读 · 0 评论 -
【Effective Objective-C 2.0读书笔记】第二章:对象、消息、运行期
在Objective-C等面向对象语言中,“对象”是基本构造单元,开发者可以通过对象来存储并传递数据。在对象之间传递数据并执行任务的过程即为“消息传递”。当应用程序运行起来之后,为其提供相关支持的代码叫做“Objective-C运行期环境”(Objective-C runtime),它提供了一些使得对象之间能够传递消息的重要函数,并且包含创建类实例所用的全部逻辑。第6条:理解”属性”这一概念属性可以原创 2015-07-21 15:48:18 · 2008 阅读 · 0 评论 -
【Objective-C环境】Objective-C编译优化
一般可以将编程语言分为两种,编译语言和直译式语言。像C++,Objective C都是编译语言。编译语言在执行的时候,必须先通过编译器生成机器码,机器码可以直接在CPU上执行,所以执行效率较高。像JavaScript,Python都是直译式语言。直译式语言不需要经过编译的过程,而是在执行的时候通过一个中间的解释器将代码解释为CPU可以执行的代码。所以,较编译语言来说,直译式语言效率低一些,但是编写的原创 2017-08-15 12:42:02 · 1342 阅读 · 0 评论 -
【iOS界面开发】UIWindow屏幕旋转自适应
屏幕上显示的每个视图都被包含于UIWindow对象,app内每个window之间相互独立。app接收到的事件都最先路由到合适的window对象,再由此派发到合适的视图。Windows与ViewControllers一起协作,从而实现屏幕旋转变换,完成各项任务。避免直接调用- [UIWindow addSubview:]方法来添加视图,而是通过操作UIViewController来添加视图,从而实现屏原创 2017-09-17 22:01:04 · 4527 阅读 · 0 评论 -
【iOS性能优化】MLeaksFinder内存泄漏检测
功能分析MLeaksFinder 是 iOS 平台的自动内存泄漏检测工具,可以在日常调试业务逻辑时自动发现并警告内存泄漏,而无需打开 instrument 等工具。它简单方便且不入侵项目逻辑,不用写任何代码即可实现ViewController,View 的内存泄露检测,也可定制检测其他类型对象的内存泄漏问题。原理当一个 ViewController 被 pop 或 dismiss 之后,我们认为该原创 2017-11-15 10:59:39 · 2384 阅读 · 0 评论 -
【Effective Objective-C 2.0读书笔记】第六章:块(Blocks)和大中枢派发(GCD)
继续这本书的读书笔记,希望在其中也加入自己的一些总结,以加深理解。之前这一章写了很多了,保存到草稿箱中,不知道为何丢失了,真是可惜,看来CSDN的MarkDown编辑器还存在一些bugs,在它打上补丁之前还是写一点发表一下吧。Let’s begin.多线程编程是每个开发者在开发现代应用程序的时候经常碰到的问题。原创 2015-04-09 23:46:53 · 2191 阅读 · 1 评论 -
【iOS逆向】iOS越狱砸壳流程
越狱安装Cydia Impactor下载越狱程序(IPA文件):iOS 9.2~9.3.3从这里下载1, iOS 10~10.3.3从这里下载[^Meridian], 砸壳iPhone砸壳准备iPhone启动Cydia,添加frida软件源(https://build.frida.re)来安装fridaMac砸壳准备Mac安装frida: sudo ...原创 2018-07-06 12:37:41 · 4174 阅读 · 0 评论 -
【Xcode应用】使用Xcode调试framework
使用Xcode调试framework的方法:集成生成framework的工程集成生成framework的工程到主工程中在主工程中添加对framework的依赖从生成framework的工程下启动app编辑Scheme,指定Executable中的app添加user断点在生成framework的工程中添加断点,并Move Breakpoints To User在...原创 2018-11-25 14:08:26 · 2026 阅读 · 0 评论 -
【开发工具】CocoaPoads结合Git Submodule
问题背景:在一个Xcode项目内使用CocoaPods来集成各个模块,需要频繁改动所依赖的Pod组件。在改动Pod组件时,常用的做法是先将Podfile中指向的Pod路径改为本地路径,修改完成之后再切回远端路径。将Pod组件引入方式改为CocoaPoads结合Git Submodule的方式,可以避免频繁修改Podfile中的Pod路径。CocoaPoads结合Git Submodule好...原创 2019-03-13 13:12:11 · 1267 阅读 · 0 评论 -
【iOS界面开发】Objective-C自动布局(Auto Layout & SizeClass)
Auto Layout自XCode 5以后,在开发Mac OS X或iOS应用程序时,我们可以在Interface Builder中使用Auto Layout特性,以适应不同的屏幕尺寸、旋转方向以及本地化需求。该特性在你新建一个工程后默认处于启动状态。有两种方式可以使用Auto Layout:在Interface Builder中,通过在Builder画布中右键拖放,或者在右下角的菜单实现。通过原创 2015-07-09 16:40:12 · 3021 阅读 · 0 评论 -
【iOS架构】iOS ReactiveCocoa函数响应式编程
声明式编程 声明式编程(declarative programming)是一种编程范型,与命令式编程相对立。它描述目标的性质,让电脑明白目标,而非流程。声明式编程不用告诉电脑问题领域,从而避免随之而来的副作用,大幅简化了并行计算的编写难度。而指令式编程则需要用算法来明确的指出每一步该怎么做。 声明式语言包括数据库查询语言(SQL,XQuery),正则表达式,逻辑编程,函数式编程和组态管原创 2016-03-13 10:56:45 · 2693 阅读 · 0 评论 -
【Xcode使用技巧】Xcode环境变量(environment variables)
Apple Build Setting Reference在苹果的 Build Setting Reference 文档1中可以找到所有可用的变量。工程中存在的所有环境变量在build 过程中,要想观察所有已存在的环境变量,你可以在 Build Phases 中添加一个 “Run Script”,并勾选上 “Show environment variables in build log”。示例打印结原创 2016-03-13 10:51:31 · 9836 阅读 · 0 评论 -
【Mac OS X开发】在NSAlert中添加NSTableView,双击NSTableView单元格用于确定选择的效果
NSString *messageTitle = @"Add New Item"; NSString *defaultButtonTitle = @"Add"; NSString *alternateButtonTitle = @"Cancel"; NSAlert *alert = [NSAlert alertWithMessageText:messageTitle原创 2014-06-05 12:33:51 · 6063 阅读 · 2 评论 -
【Mac OS X/iOS多线程编程】GCD用法学习笔记
并发所描述的概念就是同时运行多个任务。这些任务可能是以在单核 CPU 上分时(时间共享)的形式同时运行,也可能是在多核 CPU 上以真正的并行方式来运行。OS X 和 iOS 提供了几种不同的 API 来支持并发编程。每一个 API 都具有不同的功能和使用限制,这使它们适合不同的任务。同时,这些 API 处在不同的抽象层级上。为了让开发者更加容易的使用设备上的多核CPU,苹果在 OS X 10.6 和 iOS 4 中引入了 Grand Central Dispatch(GCD)。原创 2015-01-25 16:31:53 · 5386 阅读 · 0 评论 -
【Effective Objective-C 2.0读书笔记】第四章:协议和分类
Objective-C中的“协议”(protocal)类似于java中的接口。协议最为常见的用途是实现委托模式。不过也有其他用法。“分类”(category)机制,可以无须继承子类即可直接为当前类添加方法。原创 2015-07-03 11:36:59 · 1487 阅读 · 0 评论 -
【Effective Objective-C 2.0读书笔记】第七章:系统框架
第47条 熟悉系统框架第48条 少使用for循环多使用块枚举BlockEnumeration第49条 对需要自定义其内存管理语义的集合使用无缝桥接Toll-FreeBridging第50条 构建缓存时选用NSCache而非NSDictionary第51条 精简initialize和load方法的实现代码第52条 谨记NSTimer会retain它的目标对象原创 2015-03-19 21:32:01 · 937 阅读 · 0 评论 -
【Effective Objective-C 2.0读书笔记】第五章:内存管理
Objective-C语言以引用计数来管理内存,这令许多初学者纠结,要是用过以“垃圾收集器”(garbage collector)来管理内存的语言,那么更会如此。“自动引用计数”机制缓解了此问题,不过使用时有很多重要的注意事项,以确保对象模型正确,不致内存泄漏。本章提醒读者注意内存管理中易犯的错误。原创 2015-06-11 21:28:04 · 1091 阅读 · 0 评论 -
【Effective Objective-C 2.0读书笔记】第三章:接口和API设计
一旦你完成了一个应用,你可能会希望在以后的工程中重用部分代码。你也可能会发布一些代码以供其他人来使用。这意味着你需要使用Objective-C的范式和理解众多的陷阱。原创 2015-07-06 15:23:49 · 804 阅读 · 0 评论 -
【Objective-C Runtime】Objective-C Runtime文章收集
下面是我看到的关于Objective-C Runtime的文章,先记在这里,有时间再仔细整理下:-)。Objective-C RuntimeMethod Swizzling 和 AOP 实践Objective-C 的 runtime 运行时原创 2015-07-07 14:51:48 · 901 阅读 · 0 评论 -
【iOS架构】iOS应用架构概述
我们可以通过以下方式来理解MVVM与MVC/MVCS/VIPER之间的异同:MVC: View/VC + ModelMVCS: View/VC + Store + ModelMVVM: View/VC +原创 2015-09-25 09:07:33 · 1206 阅读 · 0 评论 -
【iOS界面开发】iOS下,UILabel自适应高度的方法
iOS下,UILabel自适应高度的主要思路是通过调用UILabel的- (CGSize)sizeThatFits:(CGSize)size方法来得到label的自适应高度值。原创 2015-09-24 15:44:16 · 2567 阅读 · 0 评论 -
【Mac OS X开发】实现NSImage对其指定像素的保持及拉伸
如何实现NSImage对其指定像素的保持及拉伸?在UIKit中的UIImage有以下两个方法可以实现对图片的部分拉伸:- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight- (UIImage *)resizableIm原创 2014-03-16 12:23:36 · 5967 阅读 · 0 评论 -
【Mac OS X开发】NSTextFieldCell选中和正常状态的字体段落样式设置
在设置NSTextFieldCell在选中状态和未选中状态时的两种不同的字体段落样式时,查找网上的资料,发现有很多是复制attributedStringValue进行属性字典的构建,先前也觉得这样很便利,可以直接针对某属性样式进行修改,如下所示:- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView*)controlView{原创 2013-09-01 08:05:33 · 5072 阅读 · 0 评论 -
【C基础】#if、if、#ifdef、#if defined之间的区别
#if的使用说明#if的后面接的是表达式#if (MAX==10)||(MAX==20) code...#endif它的作用是:如果(MAX==10)||(MAX==20)成立,那么编译器就会把其中的#if 与 #endif之间的代码编译进去(注意:是编译进去,不是执行!!)#if defined的使用#if后面接的是一个宏。#if defined (x) ...code...#end原创 2015-11-25 13:43:57 · 91270 阅读 · 3 评论 -
【iOS设计】一款APP从设计稿到切图过程概述
这篇文章站在GUI设计师的角度概述了APP从项目启动到切片输出的过程,相当于工作流程的介绍。这里写的不是一种规范,只是一种工作方法,加上技术的更新是非常快的,大家在具体工作中,一定要灵活运用。这里我们只说IOS系统下的设计,至于Android,因为尺寸太多,涉及的东西比较乱。1Part 1 项目立项文件结构项目名称v1.0 -> 01_源文件psd 02_效果图jpg原创 2015-09-29 00:46:28 · 13771 阅读 · 0 评论 -
【C基础】#define宏定义中的#,##,@#,\ 这些符号的神奇用法
C/C++ 宏命令的神奇用法。先看下面三条语句:#define Conn(x,y) x##y#define ToChar(x) #@x#define ToString(x) #x1. ## 连接操作符##表示连接(token pasting, or token concatenation,merge two tokens into one while expanding macros)。x##原创 2015-12-08 15:55:34 · 17139 阅读 · 1 评论 -
【Xcode使用技巧】Xcode调试方法
这里记录一下自己学习到的一些XCode调试的方法。这些调试方法可以让我们使用XCode编写代码进行调试时用起来更顺心应手。XCode的调试方法包括运行时设置断点,打印到控制台,手写命令打印等。原创 2015-05-10 18:39:45 · 10960 阅读 · 0 评论 -
【Xcode使用技巧】通过Xcode查看真机中应用程序的数据文件
有时候开发调试时,需要查看真机中应用的文件,比如sqlite之类的,可按以下步骤进行:环境:Xcode Version 7.2.1,iPad2。1)点击Xcode的Window菜单项,选择Devices选项。2)点击左边设备一览中的iPad2,右边「Installed Apps」会显示出iPad上的所有第三方应用。3)选中要查看的应用。4)点击下面的设置按钮,选择「Download Containe原创 2016-03-05 14:21:58 · 9608 阅读 · 0 评论 -
【Mac OS X开发】NSAlert的使用心得
使用NSAlert可以弹出两种不同的效果,原创 2014-07-29 19:36:59 · 9263 阅读 · 0 评论