- 博客(232)
- 收藏
- 关注
原创 Swift - 引用计数
Swift 和 Objective-C 都使用 ARC 来管理对象的内存,确保在没有强引用时自动释放对象。在 Swift 中,使用 weak 和 unowned 修饰符来处理弱引用和循环引用,而在 Objective-C 中使用 __weak 和 __unsafe_unretained。Swift 的语法更简洁,且类型安全性更高,使得内存管理更加直观。通过理解引用计数的机制和两者之间的区别,开发者可以更有效地管理内存,避免内存泄漏和其他相关问题。
2025-02-15 15:28:13
500
原创 Swift - 方法派发机制
静态派发:适用于值类型、Final 类和方法,性能最高。动态派发:适用于类的继承和重写,通过虚表派发。协议派发:适用于协议方法,通过协议见证表派发。消息转发:适用于与 Objective-C 交互和动态方法解析。理解这些派发机制有助于编写高效且符合预期的 Swift 代码。
2025-02-10 22:16:06
953
1
原创 使用deepseek写一个飞机大战游戏
需要将玩家、敌人和子弹的图像文件(player.png, enemy.png, bullet.png)放在与脚本相同的目录中。这个示例是一个简单的基础版本,可以根据需求进行扩展和优化。:在运行代码之前,需要先安装。
2025-02-09 19:06:27
295
原创 iOS - 底层实现中涉及的类型
/ 基础类型// 指针大小的无符号整数// 指针差值类型// 32位无符号整数// 64位无符号整数// 掩码类型// 用于位掩码操作。
2025-01-15 11:28:31
739
原创 iOS - 自定义引用计数(MRC)
/ 检查类是否实现了自定义的引用计数方法// 调用路径// 使用系统默认的引用计数机制} else {// 使用类自定义的引用计数机制@end。
2025-01-06 22:05:16
517
原创 iOS - AutoreleasePoolPage 节点为空时的处理逻辑
【代码】iOS - AutoreleasePoolPage 节点为空时的处理逻辑。
2025-01-06 21:46:06
514
原创 iOS - viewWillAppear 和 viewDidAppear 为什么不在同一个 runloop中执行?
【代码】iOS - viewwillappear 和 viewdidappear 在不同的 runloop中执行?
2025-01-06 21:37:09
186
原创 iOS - 线程与AutoreleasePoolPage
1. key 的作用作为索引,用于在线程的特定数据数组中定位数据全局唯一,所有线程共享2. 线程隔离每个线程维护独立的存储空间相同的 key 在不同线程中映射到不同的值3. 内存管理线程退出时自动调用析构函数自动清理线程特定数据4. 性能考虑快速访问:O(1) 的时间复杂度空间效率:每个线程只存储使用的数据这就是为什么使用同一个 key 可以在不同线程中获取不同的 page 的原理。
2025-01-06 21:26:37
575
原创 iOS - AutoreleasePoolPage 内存为什么为4K?
选择4KB页面作为存储单元的原因:1. 系统兼容性符合操作系统内存管理单位优化的内存分配和回收2. 性能考虑更好的缓存利用提高内存访问效率3. 资源平衡合理的存储容量可控的内存使用4. 实用性满足大多数使用场景简化内存管理这种设计在性能和资源使用之间取得了很好的平衡。
2025-01-06 14:08:56
253
原创 iOS - AutoreleasePool
这里涵盖了AutoreleasePool 的主要实现细节和使用注意事项。理解这些内容对于正确使用AutoreleasePool和优化内存管理非常重要。
2025-01-06 14:03:41
597
原创 iOS - 自旋锁与互斥锁
自旋锁不需要上下文切换的原因:线程始终保持运行状态不需要切换到睡眠状态持续占用CPU通过循环等待锁释放不触发线程调度不需要保存和恢复上下文这就是为什么自旋锁在短期锁定场景下性能更好,但在长期锁定场景下可能造成CPU资源浪费的原因。
2025-01-06 13:33:36
207
原创 iOS - 自旋锁
性能优化:避免上下文切换场景匹配:适合短期、快速的操作资源效率:内存占用小,初始化快实现简单:容易维护和调试硬件友好:在现代多核处理器上表现良好不适合长时间持有要考虑优先级反转问题iOS 10 后推荐使用 os_unfair_lock复杂场景应考虑其他锁机制。
2025-01-06 13:13:27
644
原创 Swift-运算符重载
目录1. 全局运算符重载2. 局部重载3. 结构体遵守Equatable 协议4. 枚举 遵守Equatable协议5. 遵守Comparable协议6. 自定义运算符1. 全局运算符重载struct Point { var x = 0, y = 0}// 全局的重载func + (p1: Point, p2: Point) -> Point{ Point(x: p1.x + p2.x, y: p1.y + p2.y)}var p1..
2021-05-03 11:01:59
936
原创 Swift-属性
属性类型 存储属性 在类或者结构体中可以有储存属性; 属性中可以有属性观察器; 存储属性是存储到结构体或者类结构中的; 枚举中不能有存储属性, 因为枚举变量只能存储case...; 计算属性 计算属性的本质是生成对应的setter方法和getter方法; 计算属性中不能有属性观察器; 计算属性不存在成员变量, 存储在结构体或者类的结构中; 在类和结构体中可以有存储属性; 类型属性 类型属性全局只能有一份, 使用static修饰; 类型属性可以在类、结构体、枚举中...
2021-05-01 14:09:33
407
原创 Swift-闭包的简单使用
public func map<T>(_ transform: (Element) throws -> T) rethrows -> [T]参数是一个闭包使用如下:let array = ["Objective-C", "Swift", "HTML", "CSS", "JavaScript"]// 当闭包作为最后一个参数的时候, 可以省略小括号 '()'array.map(){ value -> String in return valu.
2021-04-30 14:52:51
363
原创 Swift- 基础语法
基本命令:// Swift playground支持markdown语法// 开启路径: Editor -> show rendered markdown//: # 一级标题//: ## 二级标题//: ### 三级标题//: [上一页](@previous)效果如下:常量 使用let修饰/** *常量定义: let修饰 * 常量的值不要求在编译时期确定, 但使用之前必须赋值1次 * 常量声明时必须注明类型, 必须要在使用...
2021-04-11 20:54:46
280
原创 线性回归(MXNet gluon)
from mxnet import ndarray as ndfrom mxnet import autogradfrom mxnet import gluon# 1. 处理数据num_inputs = 2num_examples = 1000true_w = [2, -3.4]true_b = 4.2x = nd.random_normal(shape=(num_examples, num_inputs))y = true_w[0]*x[:, 0]+true_w[1]*x[:, .
2021-02-03 14:12:44
207
原创 卷积神经网络(多分类问题 pytorch)
# 手写数字识别 神经网络处理 高级处理import torchimport torch.nn as nn# 数据集处理from torchvision import transformsfrom torchvision import datasetsfrom torch.utils.data import DataLoader# 函数 激活函数等import torch.nn.functional as F# 优化器包import torch.optim as optim# .
2021-02-02 14:45:49
930
1
原创 多分类问题(卷积神经网络 pytorch)
# 手写数字识别 神经网络处理import torch# 数据集处理from torchvision import transformsfrom torchvision import datasetsfrom torch.utils.data import DataLoader# 函数 激活函数等import torch.nn.functional as F# 优化器包import torch.optim as optim# 分批batch_size = 64# 1. 数据处理.
2021-02-02 13:37:36
676
原创 多分类问题(手写数字 pytorch)
# 手写数字识别import torch# 数据集处理from torchvision import transformsfrom torchvision import datasetsfrom torch.utils.data import DataLoader# 函数 激活函数等import torch.nn.functional as F# 优化器包import torch.optim as optim# 分批batch_size = 64# 1. 数据处理transfo.
2021-02-02 10:50:35
359
原创 糖尿病预测(使用数据加载器 pytorch)
import torchfrom torch.utils.data import Datasetfrom torch.utils.data import DataLoaderimport numpy as np# 1. 数据处理class DiabetesDataset(Dataset): def __init__(self, file_path): xy = np.loadtxt(file_path, delimiter=',', dtype=np.float32).
2021-02-01 17:36:53
667
1
原创 糖尿病的预测(pytorch)
import numpy as npimport torch# 糖尿病预测研判# 1. 处理数据xy = np.loadtxt('diabetes.csv.gz', delimiter=',', dtype=np.float32)x_data = torch.from_numpy(xy[:, :-1])y_data = torch.from_numpy(xy[:, [-1]])# 2. 建立模型# 2. 设计模型 继承自torch.nn.Moduleclass Model(torch.
2021-02-01 17:02:16
1714
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人