3.分类可以重新实现原来类中的方法,但是会覆盖掉原来的方法,会导致原来的方法没法再使用 4.方法调用的优先级:分类(最后参与编译的分类优先) --> 原来类 --> 父类 6.Category...2.当第一次使用某个类时,就会调用当前类的+initialize方法 3.先加载父类,再加载子类(先调用父类的+load方法,再调用子类的+load方法) 先初始化父类,再初始化子类(先调用父类的+...例子:李明杰/iOS开发进阶视频教程/23-再次重构.mp4/00:10:30 12.protocol 协议 1.协议的定义 @protocol 协议名称 // 方法声明列表...B的方法中: 不能直接访问_age,必须使用子类中的get和set方法来访问它。...中无法使用TAB键对多行代码进行缩进。
第二次打印是class对象的内存分布,并且 0x00000001000080c0(isa) & 0x0000000ffffffff8ULL,得到的内存地址为 0x00000001000080c0,po打印的结果是名为...对比第一次第二次的打印,两个分别为0x00000001000080e8和0x00000001000080c0的内存地址,打印的出来的class对象的名称是一样的。...使用MachOView打开代码的可执行文件(exec)。 找到符号表,并且滚动到黄褐色的部分。...发现,00000001000080E8, 00000001000080C0的内存地址不就是上面提到要研究的么,再根据value这一列的值,就可以得知,0x00000001000080e8是类对象, 0x00000001000080c0...使用 runtime API 打印输出 //1. 子类的instance对象isa流程和继承链。
, 但只传递2个参数, 这样方法的第三个参数会自动取我们传的第二个的值 [self performSelector:@selector(printStr1:Str2:Str3:) withObject...97184] Second argument 2017-01-06 11:55:07.399 BezierPathDemo[1203:97184] Third argument NSInvocation使用时有下面三个地方要注意下...1、如果调用的方法不存在 //此时我们应该判断方法是否存在,如果不存在这抛出异常 if (signature == nil) { //aSelector为传进来的方法 NSString *info =...//此处不能通过遍历参数数组来设置参数,因为外界传进来的参数个数是不可控的 //因此通过numberOfArguments方法获取的参数个数,是包含self和_cmd的,然后比较方法需要的参数和外界传进来的参数个数...,因此可以推断返回值的具体类型
smbexec的使用(c$共享) smbexec可以通过文件共享在运程系统中执行命令。对方主机需要开启 c$ 共享,依赖于445端口。...如果对方没开启445端口,则报如下错: [-] [Errno Connection error (xx.xx.xx.xx:445)] [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应...如果对方开启了445端口,但是没有开启C$共享,则报如下错: [-]SMB Session Error: STATUS_BAD_NETWORK_NAME({Network Name Not Found}...Impacket中的smbexec.py 命令如下: ./smbexec.py xie/hack:x123456./@192.168.10.130 ..../smbexec.py xie/hack@192.168.10.130 -hashes aada8eda23213c027743e6c498d751aa:b98e75b5ff7a3d3ff05e07f211ebe7a8
视频中介绍了三个变化: 首先是数据结构的变化, Objective-C 运行时会使用它们来追踪类。 其次是 Objective-C 方法列表的变化。...“ro”代表只读,它包括像类名词,方法,协议,和实例变量的信息。Swift 类和 Objective-C 类共享这一数据结构,所以每个 Swift 类也有这些数据结构。...macOS 可以选择唤出 dirty memory,但因为 iOS 不使用 swap,所以 dirty memory 在iOS中的代价很大。...只有 Swift 类会使用 demangled name 字段,并且 Swift 类并不需要这一字段,除非有东西访问它们的 Objective-C 名称时才需要。...二、Objective-C方法列表的变化 每一个类都附带一个方法列表,当你在类上编写新方法时,它就会被添加到列表中。运行时使用这些列表来解析消息发送。 每个方法都包含三个信息。
plist构造数据.png 这样我们的plist文件就完成了,下面来说一说通过kvc的方式来读取plist文件。...kvc的概念简单说下 Key-Value-Coding(KVC)键值编码 我们主要使用的是KVC字典转模型,将plist文件中的数据以数据模型的形式读取。...在构造数据模型时应当使用以下方法 直接设置 - (void)setValuesForKeysWithDictionary:(NSDictionary *)keyedValues...由于我们plist文件的根节点是一个数组 我们以懒加载的方式来创建这个数组,并将从plist中读取的字典信息以模型的形式存储到数组中。...现在我们的数组中就都是存放了这些数据模型了。 测试一下数据吧。
但是Objective-C提供了一种特别的方式来扩展类,叫Catagory,可以动态的为已经存在的类添加新的行为。这样可以保证在类的原来的基础上,较小的改动就可以增加需要的功能。...使用Category对类进行扩展时,不需要访问其源代码,也不需要创建子类,这样我们可以扩展系统提供的类。...Category使用简单的方式,实现了类的相关方法的模块化,把不同的类方法分配到不同的分类文件中。 通过一个简单的例子看看Category如何使用。...implementation Student - (void)hello { NSLog(@"大家好,我是Young"); } @end 开始创建分类Category 001、command + n,选择Object-C...WechatIMG35.jpeg 那的Category的使用场景: 1、类包含了很多个方法实现,而这些方法需要不同团队的成员来实现 2、当你在使用基础类库中的类时,你不想继承这些类而只想添加一些方法时
在上一篇文章《Objective-C Runtime详解》中我们探讨了Runtime的基本原理,这篇文章我们将总结一下Runtime的一些基本使用 目录 查询方法 给分类添加属性 更换代码的实现方法...和《Effective Objective-C 2.0》中提到的: When the compiler saw that an object contained C++ objects, it would...上面代码中的第二个参数写的是 _cmd,等价于@selector(name) Objective-C的编译器在编译后会在每个方法中加两个隐藏的参数: 一个是_cmd,当前方法的一个SEL指针。...字典转属性 将字典转化为模型,是在我们iOS开发中最为常用的技能。...iOS的模型框架如JSONModel,MJExtension,MJExtension等皆是利用了runtime,将字典转为模型,不过兼顾的细节更多。下面我们来实现一个简易的字典转模型框架。
UIImage类并没有提供缩放图片需要用到的API,是不是觉得很吃惊?没关系,我们自己来添加一个。...) -(UIImage*)scaleToSize:(CGSize)size { // 创建一个bitmap的context // 并把它设置成为当前正在使用的context UIGraphicsBeginImageContext...中创建一个改变大小后的图片 UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext(); // 使当前的context...出堆栈 UIGraphicsEndImageContext(); // 返回新的改变大小后的图片 return scaledImage; } @end 如何使用 // 创建图片 UIImage...scaledImage = [image scaleToSize:CGSizeMake(25.0f, 35.0f)]; ---- Previous NSLog中使用的格式符
使用位运算设计可复选的枚举 一、枚举使用的一个小例子 在软件开发中,枚举是我们会经常会用到的一种编程方式,通过枚举,可以使我们的代码更具可读性与统一性。...通常情况下,我们会通过typedef来定义一种枚举的类型来使用。...例如: typedef enum { para1, para2, para3 }myEnum; 我们可以在函数的参数中来使用它: -(void)testEunm:(myEnum)...三、可复选的枚举属性 如果熟悉iOS的开发,你会发现系统很多的枚举类型都是可以复选的,例如视图的拉伸模式,json的解析属性等等,这不仅使代码可读性优化,也更加简便了一些选项设置的代码。...这种位运算的枚举在官方sdk中被广泛使用,能够有效的简化代码和提高代码的可读性。 专注技术,热爱生活,交流技术,也做朋友。 ——珲少 QQ群:203317592
三读Objective-C2.0 笔记~(作为一个OC开发者,必读之书) gitbook地址 一、熟悉Objective-C 1、了解Objective-C语言的起源 Objective-C在C...Objective-C是C的“超集”(superset),所以C语言中的所有功能在编写Objective-C代码时依然适用。因此必须同时掌握C与OC这两门语言的核心概念,方能写出高效的OC代码来。...bug 11、理解objc_msgSend的作用 可以看这篇: iOS_Objective-C 消息发送(消息查找 及 消息转发)过程中的 一二、OC中的消息和消息查找 上面文章讲述的自描述了部分消息的调用过程...12、理解消息转发机制 可以看这篇: iOS_Objective-C 消息发送(消息查找 及 消息转发)过程中的三、消息转发 要点: 若对象无法响应某个选择子,则进入消息转发流程 通过运行期的动态方法解析功能...iOS指应用程序启动时。load方法中使用其他类时不安全的(如:其他类又用到了当前类,则无法正确加载了)。整个应用程序在执行load方法时都会阻塞(不要在里面等待锁/加锁)。
Brad Cox是著名的计算机科学家,他发明的面向对象编程(OOP)语言Objective-C后来成为了苹果OS X和iOS设备App的主要开发语言。...1981年,Cox很快写出了面向对象的预编译器(OOPC),它可以将类似Smalltalk的语法翻译成C语言,这就是Objective-C的前身。...△ Stepstone公司旧址 在PPI公司,Cox把当初的OOPC发展成了Objective-C。...Objective-C也顺理成章地成为了苹果电脑OS X系统的开发语言,后来又随着2007年iPhone的横空出世,被越来越多的开发者使用。...虽然苹果于2014年推出了Swift语言意图取代之,但Objective-C现在仍是iOS的主要开发语言之一。
另一方面,我计算了位于 dyld 共享缓存中的框架,这是 iPhone OS 3.1 中引入的缓存机制,并且仍在 iOS 14 中使用。 另一点是您可能会注意到没有 Objective-C++。...一个示例是创建一个应用程序,该应用程序使用 C++ 作为低级引擎,使用 Objective-C 作为 UI。...Objective-C 运行时库支持函数在位于 /usr/lib/libobjc.A.dylib 的共享库中实现。...\." | wc -l ) 检测 C++ 与 Objective-C 类似,我们可以依赖这样一个事实,即使用 C++ 的应用程序必须使用 C++ 标准库。...这意味着 Objective-C 或 C++ 应用程序正在使用 C 代码。所以我们无法知道 Objective-C 或 C++ 应用程序是否使用了一些纯 C 代码。
是指两次selector触发之间间隔几次屏幕刷新,默认值为1,也就是说屏幕每刷新一次,执行一次selector,这个也可以间接用来控制动画速度 从头文件来看CADisplayLink的使用还是挺简单的,...Connection模式 定义:NSConnectionReplyMode(Cocoa) 描述:处理NSConnection对象相关事件,系统内部使用,用户基本不会使用。...在Cocoa应用程序中,默认情况下Common Modes包含default modes,modal modes,event Tracking modes.可使用CFRunLoopAddCommonMode...通常我们使用这个属性来做计时器的暂停与恢复。...关于invalid方法 我们知道NSTimer使用的时候如果不注意的话,是会造成内存泄漏的。原因是我们生成实例的时候,会对控制器retain一下。
Xamarin 可以让开发人员跨平台共享应用程序的代码,这样就可以使用一种编程语言开发所有平台的 App 。 Tip:编译、部署 IOS 应用程序必须在 MacOS 种进行。...优秀的 IDE :开发人员使用 Visual Studio 就可以开发 Xamarin 应用程序。...Xamarin 使用选择器向托管 C# 公开 Objective-C,并使用注册器向 Objective-C 公开托管 C# 代码。...选择器和注册器共同称为“绑定”,使 Objective-C 和 C# 可以进行通信。...它可以让开发人员从共享代码生成 iOS、Android 和 Windows 应用程序。 Xamarin.Forms 使用 XAML 来创建 UI 界面。这些 UI 会在不同平台上呈现为本机控件。
写在前面 弄了下个人站...防止内容再次被锁定...所有东西都在这里面 welcome~ 个人博客 所有方法 都很简单,大概记录一下,写文件并没有是追加的方式而是简单的覆盖 //创建文件夹
它被描述为“Objective-C without the C”,意味着它在保持Objective-C核心功能的同时,提供了更简洁、更现代的语法2。...这使得学习Swift成为iOS开发者或计划成为iOS开发者的首要任务2。Swift语言与Objective-C的比较有哪些关键差异?...Swift语言与Objective-C的关键差异主要体现在以下几个方面:语法和简洁性:Swift的语法设计更加现代化,简洁且易于理解。它不使用指针,并且在数据结构和语法上进行了改进78。...其高效的数据处理能力和对复杂界面的良好支持使其成为现代iOS应用开发中的重要工具18。开发iOS应用程序时,如何有效地使用Swift和UIKit框架进行用户界面设计?...在开发iOS应用程序时,有效地使用Swift和UIKit框架进行用户界面设计(UI设计)是提高开发效率和产品质量的关键。我们可以总结出一些策略和建议。
最近看到一些github上的单例使用,别人的用法,有一些思考,然后写demo测试了下,就这个简单的单例也有一些坑呢,希望能给他人一些提醒。...Objective-C中的单例 我们通常在OC中实现一个单例方法都是这样: static HLTestObject *instance = nil; + (instancetype)sharedInstance...[3579:81998] c6890> 很明显,通过三种方式创建出来的是不同的实例对象,这就违背了单例类有且仅有一个实例的定义。...HLTestObject: 0x7f8a5b458450> height = 10, arrayM = 0x7f8a5b459770, object = 0x7f8a5b4544e0, 可以看到,尽管使用的是同一个示例...ARC的方式管理内存,如果你还在使用MRC(这也太不与时俱进了)。
每一个子框架都是一个目录,包含了共享资源库,用于访问该资源库中储存的代码的头文件,以及图像、声音文件等其他资源,共享资源库定义应用程序可以调用的函数和方法。...通知 归档和序列化 表达式和条件判断 Objective-C语言服务 对于Foundation框架中的一些基本类的使用方法详情参见:iOS开发系列—Objective-C之Foundation框架 ...),表混淆了) 应用程序可以通过三种方式使用UIKit创建界面: 在用户界面工具(interface Buidler)从对象库里 拖拽窗口,视图或者其他的对象使用。 ...3.2 Objective-C的优点 Objective-C语言有C++ Java等面向对象的特点,那是远远不能体现它的优点的。Objective-C的优点是它是动态的。...(为了区分两个对象,我把前面提到的对象叫Objective-C对象),包括Objective-C对象的方法调度表,实现了什么协议等 等。
一个例子是我开发的应用程序 Clutters,我在那里使用 Swift、SwiftUI、Objective-C 和 C,使用最合适的编程语言来解决特定Dev问题。...在本文中,包含一行 Swift 代码的应用程序将被视为使用了 Swift 。 您将看到 Objective-C 和 C++ 被提及,但您可能会注意到 Objective-C++ 的缺失。...这里使用的方法无法真正检测到使用 Objective-C++ 构建的二进制文件。此类二进制文件被视为同时使用 Objective-C 和 C++ 。 最后,你应该对这个分析持保留态度。...请再次注意,一个二进制文件可以被多次计算,所以这个图中的二进制数据的总和大于二进制总数: 使用各种编程语言的二进制文件数量 在 iOS 15 的所有二进制文件中: 89% 使用了 Objective-C...Objective-C 仍然是 iOS 的核心,不会很快消失。 苹果对 Swift 的使用进展得比以往任何时候都快。去年,Swift 超过了C。今年,Swift 越来越接近 C++。
领取专属 10元无门槛券
手把手带您无忧上云