自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 layoutSubviews理解

但需要注意的是,`layoutSubviews` 方法是在布局计算阶段被调用的,视图的绘制则是在 `drawRect:` 方法中进行的,这两个方法的调用时机有所不同。`**: 当我们手动调用了 `setNeedsLayout` 或 `layoutIfNeeded` 方法时,系统会标记视图需要重新布局,最终会触发 `layoutSubviews` 的调用。总结来说,`layoutSubviews` 方法的调用时机通常可以认为是在视图的布局计算完成后,确保视图及其子视图的尺寸和布局是最新的。

2024-06-19 10:21:48 290

原创 一些模糊的知识点

为啥不是 输出world 原因是什么?如果是 C++中的引用,是不是就会输出 world?

2024-06-18 15:55:25 175

原创 swift optional 类型

MyClass(property: "Hello") // 可选的 MyClass 类型,可以包含一个 MyClass 对象或 nil。在调用可选类型的属性、方法或子脚本时,若可选类型为 `nil`,则整个表达式返回 `nil`。使用 `if let` 或 `guard let` 来安全地解包(unwrap)可选类型。使用可选类型时,你需要注意如何安全地处理这些值,因为它们可能为 `nil`。总结来说,加上 `?提供一个默认值,如果可选类型值为 `nil`,则使用默认值。

2024-06-12 15:58:59 362

原创 swift中的set和get方法

在这个例子中,将`balance`设置为`100.0`会触发`willSet`观察者,打印出"即将设置新余额: 100.0",然后设置新值,接着触发`didSet`观察者,但由于新余额是正数,不会打印"余额不足"的消息。计算型属性的`get`方法定义了如何计算属性的值,而`willSet`和`didSet`观察者提供了在属性值变化前后执行代码的能力。当创建`Account`类的实例时,`balance`属性被初始化为`0.0`,这个值是直接赋值的,不会触发`willSet`或`didSet`观察者。

2024-06-07 10:30:28 443

原创 swift if和guard的具体使用区别

总的来说,虽然在某些情况下 `if` 和 `guard` 可能会看起来有些相似,但它们的主要区别在于使用场景和编码约定。- 在 Swift 社区中,通常推荐在需要验证条件并尽早返回的情况下使用 `guard` 语句,以增强代码的可读性和清晰度。- 在可选绑定方面,`if let` 和 `guard let` 的作用相似,都用于将可选值解包并绑定到一个新的常量或变量。- `guard` 语句通常用于条件不符合预期时执行早期返回操作,以避免后续代码的执行,提高代码的可读性和减少嵌套。

2024-06-06 17:44:26 314 1

原创 runloop 和 autoreleasepool

在 `@autoreleasepool{ }` 块的开始处创建了一个新的 Autorelease Pool 对象,在块的末尾,这个 Autorelease Pool 被清空,其中所有的对象都会收到 `-release` 消息。当你将一个对象加入到自动释放池中时,它的释放会被推迟到自动释放池的块结束时。这意味着,当你在处理大量数据的循环中使用 `@autoreleasepool{ }` 时,块内创建的所有 autorelease 对象都会在每次迭代的末尾被释放,而不是等到外部的 RunLoop 结束。

2024-06-06 17:43:25 528

原创 腾讯mars理解

1. **TCP协议**:- Mars框架底层使用TCP协议来建立稳定的网络连接。它通过某些优化手段(如心跳包、断线重连策略等)来保持连接的稳定性和即时性。2. **Mars的长连接协议**:- Mars专门针对移动端优化了长连接的处理,定制了一套协议来控制心跳频率、断线重连策略以及网络状态的检测,以此来降低移动网络连接的延迟和功耗。

2024-06-06 17:43:10 764

原创 mmap 优化了IO的原理是什么? 结合代码讲解下?最好对比下,不使用mmap性能上会有哪些损耗

mmap`(内存映射)是一种在现代操作系统中优化 I/O 操作的技术,通过它可以将文件或设备的内容直接映射到进程的地址空间。2. **页缓存利用**:`mmap` 利用的是操作系统的页缓存(Page Cache),这意味着对映射区域的访问和修改,实际上是对页缓存的访问和修改,可以降低物理磁盘 I/O 操作的频率。- **额外的内核态和用户态切换**:在不使用 `mmap` 的情况下,每次 `read` 或 `write` 调用都涉及从用户态到内核态的切换,这在频繁的 I/O 操作中会增加额外的开销。

2024-05-31 14:14:48 224

原创 runloop和线程以及timer

在你描述的代码片段中,`NSTimer` 看似在子线程中创建并启动,但实际上这种做法并不会使得定时器在子线程的 RunLoop 中执行。这里的关键是理解 `NSTimer` 和 RunLoop 的交互模式,以及 `scheduledTimerWithTimeInterval:repeats:block:` 方法的行为。- 在你提供的例子中,调用 `[timer fire]` 会触发一次定时器,但这并不代表定时器会继续按期执行,除非子线程的 RunLoop 被正确启动并维护。

2024-05-17 20:05:57 532 1

原创 分析一个完整网络请求的过程以及过程中可能出现的错误

``客户端 --> DNS解析 --> 建立连接 --> 发送请求 --> 服务器处理 --> 发送响应 --> 客户端接收```- 错误:DNS解析错误。- 原因:域名无法解析到IP地址,可能因为域名不存在、DNS服务器不可用或网络配置问题。- 错误:连接超时、网络不可达、SSL/TLS握手错误。- 原因:目标服务器不响应、网络路径问题、安全证书问题(SSL/TLS错误)。

2024-05-10 10:44:30 335

原创 C++中对象称呼的纠正

**动态分配对象(Dynamically allocated object)**:通过使用`new`(或在C语言中`malloc`)运算符在堆上分配,通常与手动内存管理相关,需要使用`delete`(或`free`)运算符来释放。- **智能指针(Smart pointer)**:如`std::unique_ptr`、`std::shared_ptr`和`std::weak_ptr`,这些在C++11以后引入的类型提供了更安全的堆内存管理。对于使用了现代C++内存管理的情况,使用"智能指针"来描述。

2024-05-07 15:52:00 315 1

原创 为什么_name可以避免递归调用,原理是什么?

为了避免这种递归调用,你应该在`getter`和`setter`的实现中直接使用与该属性相对应的实例变量(在这个例子中是`_name`)。但是,如果你在`getter`或`setter`方法的实现中使用了`self.property`(如`self.name`),你实际上就是在调用同一个`getter`或`setter`方法。同时,编译器还会合成一个实例变量(通常称为`ivar`),默认情况下,这个实例变量的名称是在属性的名称前加上下划线(在这个例子中是`_name`)。实例变量直接存储着属性值的内存。

2024-05-06 11:27:23 271

原创 NSURLErrorDomain 中的ErrorDomain 是什么以及如何设计这么一套规范

设计一个错误域需要创建一个错误域字符串和一系列相关的错误代码。通常,这些错误代码会被定义为枚举的形式。下面是如何定义一个简单的自定义错误域,以及相关的错误代码的示例。首先,定义错误域字符串常量:```objc```然后,在相应的`.m`文件中初始化这个字符串:```objc```接下来,定义错误代码的枚举:```objc// ... 更多自定义错误代码```

2024-05-06 11:08:45 690

原创 iOS SDK开发相关经验总结

要检查重复定义的符号,你可以使用以下方法:1. 编译时错误:编译你的代码时,编译器会给出错误信息,指出哪个符号在多个地方重复定义。这些错误信息通常会包含符号的名称和位置。通过查看编译错误信息,你可以确定重复定义的符号。2. 编译时警告:有时,重复定义的符号可能会引起编译时的警告而不是错误。尽管编译尚未失败,但仍然应该查看警告信息。警告信息通常提供了重复定义符号的名称和位置,因此你可以检查这些警告并解决符号冲突。

2024-01-30 17:16:24 836 1

原创 iOS开发中容易遗忘的细节点记录

为避免这些崩溃,你可以在插入或访问元素之前进行一些校验,确保键和值都是非空的,或者先检查是否存在键再进行操作。值,而不会导致崩溃。这在编码过程中非常有用,因为它允许我们方便地检查键是否存在,并避免潜在的崩溃问题。值,这种设计有助于简化代码和避免潜在的崩溃。方法)时,并不会导致崩溃。等)对于查询不存在的键都会返回一个合法的。总结:在 Objective-C 中,使用。键来访问字典中的元素,都会导致崩溃。的下标语法来查询一个不存在的键(或。方法来查询一个不存在的键时,会返回。查询一个不存在的键时,

2024-01-10 09:45:09 519

原创 数字签名和md5校验

数字签名无论是为了防止信息被篡改,还是为了防止信息的伪造,都具有较高的安全性。而MD5校验则通常用于文件的校验、数据传输过程中的验证等方面。总之,数字签名和MD5校验两者虽然有相似之处,但是应用场景、精度、验证方式等都存在一定的不同,需要根据具体的需求和情况来选择合适的验证方式。:数字签名使用公钥加密和私钥解密的机制来验证数据的安全性和完整性,而MD5校验则是对数据的摘要信息进行计算并比对的过程。:数字签名的精度极高,几乎不存在误判的情况。数字签名和MD5校验都是用于验证数据的完整性和安全性。

2024-01-05 09:58:23 721 1

原创 鸿蒙开发相关关键词记录

index.ets文件一般是应用程序的入口视图,即展示在应用程序启动时的第一个界面。它会定义应用程序的整体布局、包含的不同元素和它们的属性,以及与这些元素相关联的事件处理逻辑等。Element Template是鸿蒙应用程序中用于定义应用程序界面的一种模板,它采用XML或者JS语法,包含了界面元素的结构、样式和交互等信息。总结起来,index.ets指的是鸿蒙应用程序的入口视图文件,它是一个Element Template Script文件,用于定义应用程序的界面结构、样式和交互。

2024-01-03 15:07:31 498 1

原创 c++ 函数指针和指针函数以及代码举例

需要注意的是,在 C++ 中函数指针和指针函数在使用时有些许不一样的地方,需要根据具体场景选择使用。返回类型 (*指针变量名)(参数类型列表)返回类型 (*函数名)(参数类型列表)函数指针和指针函数是两个不同的概念。

2024-01-02 10:06:37 337

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除