「OC」源码学习——属性关键字

重学OC第五篇:属性关键字、方法归属、内省 文章目录一、属性关键字1 @property、@synthesize 和 @dynamic2 nonatomic、atomic3 readwrite、readonly4 strong、retain、weak、assign、copy、unsafe_unretained5 nullable、nonnull6 属性修饰符分析6.1 objc_getProperty与objc_setProperty6.2 TypeEncoding6.2.1 方法类型编码6.2.2 属性类型编码二、方法归属1 class_getIn 阅读详情

「OC」源码学习——属性关键字

属性的声明

@property (nonatomic, strong) NSString *name;

其实属性就是成员变量和自动编写的存取方法

Property 的组成

属性的作用

读写类的关键字

  • readonly,只读只生成相应的 getter 方法,以及带下划线的实例变量;
@property ( readonly ) int age;
  • readwrite,生成 setter 、getter 方法,以及带下划线的实例变量;
@property ( readwrite ) int age; 

原子性操作类关键字

1. atomic (默认)
  • 作用:保证属性访问的原子性

  • 实现原理:

    - (id)object {
        @synchronized(self) {
            return _object;
        }
    }
    
  • 特点:

    • 线程安全但性能较低
    • 不能完全避免线程问题
2. nonatomic
  • 作用:非原子访问,提高性能

  • 特点:

    • 访问速度比 atomic 快 10-20 倍
    • 需要开发者自行处理线程安全
  • 使用场景:

    @property (nonatomic) NSString *name; // 推荐在单线程环境使用
    

内存管理关键字

strong (默认)
  • 作用:创建强引用,增加对象的引用计数

  • 适用类型:对象类型

  • 实现原理:

    - (void)setObject:(id)newObject {
        [newObject retain];    // 保留新对象
        [_object release];     // 释放旧对象
        _object = newObject;   // 赋值
    }
    
  • 使用场景:

    @property (strong) NSString *name; // 推荐用于对象属性
    
weak
  • 作用:创建弱引用,不增加引用计数

  • 适用类型:对象类型

  • 特点:

    • 对象释放时自动置 nil
    • 避免循环引用
  • 实现原理:

    // 运行时自动注册到 weak_table
    objc_storeWeak(&_weakRef, object);
    
  • 使用场景:

    @property (weak) id delegate; // 代理模式
    
copy
  • 作用:创建对象的副本

  • 适用类型:实现了 NSCopying 协议的对象

  • 实现原理:

    - (void)setName:(NSString *)name {
        [_name release];
        _name = [name copy]; // 调用 copy 方法
    }
    
  • 使用场景:

    @property (copy) NSString *uniqueID; // 保护不可变对象
    
assign
  • 作用:直接赋值,不进行内存管理

  • 适用类型:基本数据类型、C 结构体

  • 风险:对象类型使用可能造成野指针

  • 使用场景:

    @property (assign) NSInteger count; // 基本数据类型
    
unsafe_unretained
  • 作用:类似 assign和weak的结合,但用于对象类型,不添加引用计数,比weak性能高些

  • 风险:对象释放后不置 nil

  • 使用场景:

    @property (unsafe_unretained) NSObject *legacyRef; // 兼容旧代码
    

可空性关键字

nullable
  • 作用:表示属性可以为 nil

  • 使用场景:

    @property (nullable) NSString *optionalName;
    
nonnull
  • 作用:表示属性不应为 nil

  • 使用场景:

    @property (nonnull) NSString *requiredID;
    

@property在runtime中的实现

struct property_t {
    const char *name;            // 属性名称
    const char *attributes;      // 属性特性字符串
};

特性字符串格式:"T[类型],[特性1],[特性2],...,V[变量名]"

示例分析:

// 声明
@property (nonatomic, copy) NSString *name;

// 对应的 attributes 字符串:
"T@\"NSString\",C,N,V_name"
代码含义说明
T…类型后面跟着类型编码
Ccopy使用 copy 语义
&retain/strong使用引用计数保留
Nnonatomic非原子性
Rreadonly只读
Wweakweak 引用

设置@property的函数——reallySetProperty

static inline void reallySetProperty(
    id self,           // 目标对象(属性所属的实例)
    SEL _cmd,          // 设置方法的选择器(通常为 setXxx:)
    id newValue,        // 要设置的新值
    ptrdiff_t offset,   // 实例变量在对象内存中的偏移量
    bool atomic,        // 是否原子操作
    bool copy,          // 是否使用 copy 语义
    bool mutableCopy    // 是否使用 mutableCopy 语义
)
static inline void reallySetProperty(id self, SEL _cmd, id newValue, ptrdiff_t offset, bool atomic, bool copy, bool mutableCopy)
{
    // 1. 处理特殊情况:offset为0表示要设置的是isa指针(即改变对象的类)
    if (offset == 0) {
        object_setClass(self, newValue);
        return;
    }

    id oldValue; // 用于保存旧值,以便后续释放
    // 2. 计算实例变量在对象内存中的位置(slot指针)
    id *slot = (id*) ((char*)self + offset);

    // 3. 根据属性修饰符处理新值(copy/mutableCopy/retain)
    if (copy) {
        // 执行copy操作:调用copyWithZone:方法创建不可变副本
        newValue = [newValue copyWithZone:nil];
    } else if (mutableCopy) {
        // 执行mutableCopy操作:调用mutableCopyWithZone:方法创建可变副本
        newValue = [newValue mutableCopyWithZone:nil];
    } else {
        // 如果不是copy/mutableCopy,则进行retain操作(strong修饰)
        // 先检查新旧值是否相同,避免不必要的操作
        if (*slot == newValue) 
            return; // 相同则直接返回
        // 对新值进行retain(增加引用计数)
        newValue = objc_retain(newValue);
    }

    // 4. 根据原子性要求(atomic/nonatomic)执行赋值操作
    if (!atomic) {
        // 非原子操作:直接赋值
        oldValue = *slot; // 保存旧值
        *slot = newValue; // 将新值赋给实例变量
    } else {
        // 原子操作:需要加锁保证线程安全
        // 4.1 获取与当前slot关联的自旋锁
        spinlock_t& slotlock = PropertyLocks[slot];
        // 4.2 加锁
        slotlock.lock();
        // 4.3 在锁保护下赋值
        oldValue = *slot;
        *slot = newValue;
        // 4.4 解锁
        slotlock.unlock();
    }

    // 5. 释放旧值(在retain/copy/mutableCopy之后,旧值不再被引用)
    objc_release(oldValue);
}

Protocol 中的属性

  • 在 Protocol 中使用 @property 只会自动生成 setter 和 getter 方法声明,不会自动生成其实现。
  • 我们在 Protocol 中使用属性的目的,是希望遵守我协议的对象能实现该属性。

Category 中的属性

  • 在 Category 使用 @property 也是只会自动生成 setter 和 getter 方法的声明,不会自动生成其实现。
  • 如果我们真的需要给 category 增加属性的实现,需要借助于运行时的两个函数:objc_setAssociatedObject、objc_getAssociatedObject。即关联对象

Atomic对线程安全的作用

看到reallySetProperty之中,对于Atomic之中的处理

 if (!atomic) {
        oldValue = *slot; 
        *slot = newValue; 
    } else {
        spinlock_t& slotlock = PropertyLocks[slot];
        slotlock.lock();
        oldValue = *slot;
        *slot = newValue;
        slotlock.unlock();
    }

其实我们可以看到,这个原子锁就是在调用setter/getter方法时,使用自旋锁进行加锁,即使用atomic修饰的作用在于:单个读/写操作的原子性,保证属性值的读取或写入操作是完整的

但是仍然存在一些问题:

1. 复合操作问题

// 线程1
if (self.atomicCounter > 0) {
    self.atomicCounter -= 1; // 非原子操作
}

// 线程2
self.atomicCounter = 100;

问题分析:

  • 虽然每个单独的读写是原子的
  • 但 检查值->修改值 的组合操作不是原子的
  • 线程2可能在检查后修改值

2. 多属性一致性问题

// 账户转账示例
@interface Account : NSObject
@property (atomic) double balanceA;
@property (atomic) double balanceB;
@end

// 线程1:转账操作
account.balanceA -= 100;
account.balanceB += 100;

// 线程2:读取总额
double total = account.balanceA + account.balanceB;

问题分析:

  • 每个属性单独是原子的
  • 但两个属性的组合操作不是原子的
  • 可能读到中间状态:balanceA已扣款但balanceB未加款

copy

iOS-OC 立即下载

相关推荐

18个 ios 项目源代码

18个 ios 项目源代码 各种布局 控件使用 及扩展视图 自定义UITableViewCell。实现各种样式的表格输入界面、自定义Tab Bar的文字、颜色和图片加箭头、列表个性化列表项、IOS欢迎界面等。

【OC】 属性关键字

声明一个时编译器会自动生成setter和getter方法。getter方法与变量名同名,setter方法在变量名前加set前缀并遵守驼峰命名法。另外,BOOL类型可以定义以is开头的getter方法,例如。使用 编译器会自动为你声明的属性添加setter和getter方法,方便使用点语法控制属性。使用 是告诉编译器,setter和getter方法已由用户实现,编译器无需添加。但是如果用户使用了,但是没有实现setter和getter方法,使用点语法调用属性,编译时不会警告,运行时会出错。如果两个都没使用,编

m0_63852285的博客 1606

iOS项目源代码(18个)

转载,18个ios项目源代码————————————————

OC属性关键字和单例模式

如果一个类始终只能创建一个实例,则这个类被称为单例类。在程序中,单例类只在程序中初始化一次,所以单例类是储存在去全局区域,在编译时分配内存,只要程序还在运行就会一直占用内存,只有在程序结束的时候释放这部分内存。有三个注意点。

qq_73106050的博客 2474

史上最全的ios开发源码

苹果iOS是由苹果公司开发的手持设备操作系统。苹果公司最早于2007年1月9日的Macworld大会上公布这个系统,最初是设计给iPhone使用的,后来陆续套用到iPod touch、iPad以及Apple TV等苹果产品上。iOS与苹果的Mac OS X操作系统一样,它也是以Darwin为基础的,因此同样属于类Unix的商业操作系统。原本这个系统名为iPhone OS,直到2010年6月7日WWDC大会上宣布改名为iOS。截止至2011年11月,根据Canalys的数据显示,iOS已经占据了全球智能手机系统市场份额的30%,在美国的市场占有率为43%。 源码列表: 按钮类 按钮 Drop Down Control 按钮-Circular Music Player Control 》》Flat Pill Button 按钮类--Fancy Menu 按钮之Custom Gradient Button 按钮之Flat Button 按钮之NIDropDown 按钮之Popup Menu 按钮之UIMenuItem with Image 标签类 标签之Emoji Label 标签之Justifier Label 标签之Top Aligning Label 标签之单一label多颜色多字体 弹出视图 弹出视图 View Bounce Animation 弹出视图(Popup View)UIPopoverListView 弹出视图(Popup View)之URBAlertView 弹出视图(Popup View)之自定义菜单UIMenuBar 弹出视图-Patterned Alert View 弹出视图-Table Alert 弹出视图类--Blur ModalView 弹出视图类--Depth View 弹出视图类--FWTPopover 弹出视图类--icon sheet 弹出视图类--Informatic Toolbar 弹出视图类--WCAlertView 弹出视图之Depth Modal 弹出视图之SelectViewController 导航条 导航条(Navigation Bar)Navigation Menu 导航条(Navigation Bar)之Menu on NavigationBar 导航条类--iOS更换皮肤 导航条之Breadcrumb View 导航条之NavBarNotificationView 导航条之NavigationController Transition 导航条之Title Swipe View 导航条之Title View on NavigationBar 地图类--自定义地图标注 地图(Map)之SJOPaperboy 地图类--Custom Annotation 地图类--DirectionsKit 地图类--Location Indicator 地图类--简单的地图路径 地图类--自定义地图标注 动画类 动画--Spring LoadedView 动画-UIKitForGame 动画类--Guide Arrow 动画之Animation Sequence 动画之Genie Effect 动画之Steam View 分段选择类 分段选择(Segment)之URBSegmentedControl 分段选择类--SVSegmentedControl 扩展 分段选择之AKSegmentedControl 分段选择之Color Bar Segments 滚动视图 滚动的标签 滚动视图(ScrollView)Scroll Grid Controller 滚动视图--Infinite GridView 滚动视图类--CoverFlow 滚动视图类-Lazy ScrollView 滚动视图类--Parallax ScrollView 滚动视图类--Parallax View 滚动视图类-简单的广告栏 滚动视图类--拖动UIScrollView放大图片 滚动视图之Extended UIScrollView 滚动视图之MCPagerView 滚动视图之Page Scrubber Bar 滚动视图之Parallel View 滚动视图之SBFlowView 滚动视图之Wheel Component 汉字转换为拼音 滑竿类 滑杆(Slider)Circular Slider View 滑杆(Slider)之Range Selector 滑杆(Slider)之Volume Bar 滑杆类-Vertical Slider View 滑杆之Slider popover 滑杆之Trim Control 绘图类--My Palette 绘图类--超级简单的画正方形的方法 绘图之Drawing View 基于FMDB的数据库操作 简单阅读器 键盘类 键盘(Keyboard)之自定义表情键盘 键盘-FaceBoard 键盘-Keyboard Bar TextField 键盘类》》Number PadView 键盘类》》ZenKeyboard 键盘类--自定义的拨号键盘 键盘之Custom iOS Keyboard 进图条类 进度条(Progress)Circular Progress View 进度条(Progress)之Progress Toolbar 进度条-Colorful ProgressView 进度条类--Range Slider With Progress 进度条之circular timer 进度条之MCProgressView 开关类 开关(Switch)之RESwitch 开关-Simple Switch Demo 开关之Toggle View 开关之TTSwitch 列表类 联系人搜索算法 列表 纵向Table里嵌套横向Table 列表(Table)Cell Flip Segue 列表(Table)之DynamicHeights 列表(Table)之Expansion Table 列表(Table)之Horizontal table 列表(Table)之Pull Up To Refresh 列表(Table)之TableView with SearchBar 列表(Table)之UITable嵌套UITable 列表(Table)之UploadProgressView 列表-Rainbow Styled Pull To Refresh 列表-UITableView背景随动 列表类》》自定义Table View折叠效果 列表类-FormInputAccessoryView 列表类-Grid TableView 列表类-Grouped TableView With Shadows 列表类--iOS 6.0 Pull to Refresh 列表类--Section Selection View 列表类--Styled TableViewCell 列表类--TableView的各种操作 列表类--UIListView 列表类--下拉刷新加载SQLite数据 列表-让TableView的子view保持固定 列表之ExpansionTableView 列表之iOS Tree Component 列表之Refresh Control 列表之首列固定的列表 日历类 日历(Calendar)之Calendar Picker 日历(Calendar)之TimesSquare 日历之CalendarView 日历控件 日历之封装的My97DatePicker日历 社交类 社交分享-SinaWeibo Share 社交分享类》》ios6 Share Demo 社交分享类--Social Share TableViewCell 社交分享之KRShare 社交分享之MessageActivities 社交分享之ShareSDK 视图布局类 视图布局(View Layout)Border View 视图布局(View Layout)之Linear Layout View 视图布局(View Layout)之Quilt Layout 视图布局(View Layout)之模仿ness伸缩效果 视图布局-Animated Grid 视图布局-Note ViewController 视图布局-Side bar demo 视图布局-Sliding Grid View 视图布局类》》Circle Layout 视图布局类-HGPhoto Wall 视图布局类--Scaling For iPad mini 视图布局类--Swipe ViewController 视图布局之Cycled Viewer 视图布局之Dragging Buttons 视图布局之Mosaic UI 视图布局之Rounded View 视图手势切换 视图切换(View Transition)GuideViewController 视图切换类-3D浏览器 视图切换类--zaker应用进入画面效果 视图切换之视图切换大小渐变效果 手势交互--物体根据重力感应运动 手势交互之Drag View 手势交互之Touch Visualizer 图表类 图表--百分比圆环 图表类--Percentage Chart 图表类--极简个税计算器 图表之Rotation Pie Chart 图表之实时更新的曲线图 图像类 图像(Image)Transition ImageView 图像(Image)之Colorized Progress View 图像-AsyncImageView 图像-Blurred Image 图像-iOS Image Editor 图像-NLImageCropper 图像-Scratch View 图像类 -Photo Zoom 图像类》》360 Degree Panorama 图像类--Before After 图像类--Crop Image 图像类--Image Category 图像类--Image Select and Crop 图像类--OLImageView 图像类View With Bordered Image 图像类--图片下载和保存 图像之AmazeKit 图像之Croppable View 图像之ImagePickerController of InstaPDF 图像之ImageView With Preview 图像之Media Focus Manager 图像之Multiple Image Picker 网络类 网络类--Downloader Management 网络类--photo批量上传ftp 网络类--Reachability 网络之Multi Downloader 文字视图类 文字视图(Text)之AutoComplete TextField 文字视图(Text)之Bar Track ball Item 文字视图(Text)之Messages TableViewController 文字视图(Text)之TextView Placeholder 文字视图-HashTag Mention Controller 文字视图-Tweet Label 文字视图类--Digit Input 文字视图类--emoji-converter 文字视图类--Placeholder TextView 文字视图类--Swipe Shift Caret 文字视图之Autocomplete UITextField 文字视图之Clickable Label 文字视图之Hyperlink Label 文字视图之Note View 文字视图之Rich Content Label 相机类 相机-iOSMp4Camera 相机类>>Camera多张拍摄Demo 相机类--flash light 相机之实用手电筒 选项卡类 选项卡之AKTabBarController 选项卡之Arc Tab 选项卡之LSTabs 选择器类 选择器类--PickerView with Search Bar 选择器类--Value Selector 选择器类--Wheel Menu 选择器类--老虎机 选择器之定制多选的PickerView 音频声效类 音频声效 VoiceTTS Demo 音频声效(Audio)之语音识别 音频声效-iOS Mp3 Recorder 音频声效--VoiceTTS Demo 音频声效类--AAC Audio Converter 音频声效类--BobMusic播放器 音频声效类--Groover 音频声效之Hysteria Player 音频声效之Sound Board 游戏引擎类 游戏引擎(cocos2d)Castle Hassle 游戏引擎类》》模仿合金弹头Demo 游戏引擎类--tank大战 游戏引擎类--Tiny Seal 游戏引擎类--基于cocos2d的连连看游戏 游戏引擎类--简单炸弹人小游戏源码 游戏引擎类--切水果游戏 游戏引擎类幸运大转盘的抽奖游戏 游戏引擎-推箱子游戏 游戏引擎之雷电游戏的激光子弹 指示器类 指示器(HUD)之Android Style Toast 指示器-Activity Bar 指示器--Notify HUD 指示器之MBAlertView 指示器之YLActivityIndicatorView 其他类 财付通打印票据和拖动银行卡效果 寸光阴课程表 功能齐全的计算器 每日金句 扫雷游戏 数字输入 天气预报 之DDClock 之滚动视图旋转菜单 状态栏-StatusBar Notifier View 状态栏之MPNotificationView Ad Controller AdMob demo Animation之Gmail Like Loading AWVersionAgent Bee Framework Circle Menu Cocoa Touch Barcodes Contact Picker FileMD5Hash Fontastic Icons fontawesome Harpy iHasApp In-App Feedback In-App Purchase Inner Shadow Layer Keyboard之DLIDEKeyboard Leak Hunter Message Template NSLogger NSUndoManager Demo Open InApp Activity Passcode Passcode Lock Rating Control SBook ScaffoldKit for Core Data Shine Effect SKYdata Sliding Puzzle Board Spotlight System File Browser Ternary Search Tree UIBezierPath Symbol UITextField 焦点提示 Webview之UIWebView 离线浏览

OC语言源代码

OC语言基础课本光碟的源代码。初学者可以参考

「OC」源码学习——对象的底层探索

上次我们说到了源码里面的调用顺序,现在我们继续了解我们上一篇文章没有讲完的关于对象的内容函数,完整了解对象的产生对于isa赋值以及内存申请的内容。

aa2002aa的博客 875

Starlink vs Kuiper vs OneWeb:三大低轨卫星网络架构对比与实战应用场景解析

本文对比分析了Starlink、Kuiper和OneWeb三大低轨卫星网络架构的技术差异与商业应用场景。从轨道设计、通信性能到商业落地,详细解析了各系统在近地卫星网络领域的独特优势与挑战,为未来全球宽带服务格局提供专业见解。

weixin_29255731的博客 805

@property属性关键字详解

@property的常用属性关键字有nonatomic、atomic、readonly、writeonly、readwrite、assign,copy、strong、weak、看着挺多的,但是经常用的也就几个notomic: 默认关键字,也就是说如果什么都不写,默认就是这个。表示该属性是线程同步的。一般用不到,会影响性能。nonatomic: 非线程同步,基本都是用这个。保证属性不会被其他线程修改r

helloworld的博客 2294

操作系统期末大题类型题解

额,OS主要这回考程序分析题,PV操作、生产者消费者啊,哲学家进餐问题,死锁问题啊,如何避免死锁,经典银行家算法,页面置换算法啥的,磁盘调度......总计还有很多,就不一一说了 PV操作 谈到PV操作,首先要了解什么是信号量,其实就是用来解决互斥与同步问题的,分为原语wait(S)和signal(S),也就是我们常说的PV操作,在这里给出王道上的概念 wait(S){ while(S>0) S=S-1; } signal(S){ S=S+1; } 记录型信号量

ZXxxiaoxuan的博客 791

Claude Code 接入 DeepSeek-V4 教程

本文介绍Claude Code的安装配置流程:1) 安装Node.js 18+和Git(Windows);2) 通过npm全局安装@anthropic-ai/claude-code;3) 配置DeepSeek API环境变量(需替换API Key);4) 启动Claude Code或配置VSCode插件。重点包括Linux/macOS和Windows的环境变量设置方法,以及VSCode插件的settings.json配置项。完成配置后即可在终端或VSCode中使用Claude Code功能。

培根芝士的专栏 2001

「OC」源码学习—— 消息发送、动态方法解析和消息转发

前面我们在学习alloc源码的时候,就在callAlloc源码之中简单的探究过,类初始化缓存的问题,我们知道在一个类第一次被实例化的时候,会调用去二次调用alloc方法,这篇文章就是探究我们在调用方法的时候,会需要经历一个什么流程。

aa2002aa的博客 1114

ss524v100 调试cvbs输出

启用视频层3 dev2 对应 layer3在vdec与vo绑定的时候(不需要经过vpss),不能绑定错误,以下是绑定的程序。

2116

【iOS】strong和copy工作流程探寻、OC属性关键字复习

本文探讨了OC中strong和copy修饰符的区别。通过测试代码发现,copy修饰的变量会生成对象副本,而strong修饰的变量直接引用原对象。当原对象修改时,copy修饰的变量不受影响,而strong修饰的变量会随之改变。 底层实现上,strong通过objc_storeStrong()函数管理引用计数;copy则先调用copy方法创建副本,再进行引用管理。

2301_80467753的博客 1251

Unity UGUI深度优化

Unity UGUI优化相关

不定时分享所学所得,包括游戏开发和其他收获! 2717

ubuntu20.04屏幕亮度无法调节(亮度条调节无效)的简单靠谱解决方案及踩坑历程

0 前言   网上关于ubuntu系统亮度无法调节的问题的解决方法有很多,但是绝大部分并没有什么用(这也是我自己的亲身体会),或者并不靠谱。在遍尝各路方法过后,我终于解决了这一棘手的问题(毕竟最大亮度真的非常刺眼,无法长时间直视),在此记录一下踩坑历程以及最后的解决方案。 1 Naive方法   由于使用需要,最近在电脑原有的win10基础上安装了ubuntu双系统。我安装的是当前新版的ubuntu20.04.2.0,靠谱的安装教程可以参考这里。   之前师兄说双ssd安装双系统会有系统启动引导的问题出现,

zeeq的博客 4万+

【iOS】OC关键字总结及底层原理(上)

此文总结了线程安全和作用域相关的关键字,主要分析了内存管理相关关键字(retain、assign、copy、strong、weak)的源码流程,总结了内存管理的方法,回顾了引用计数器SideTable、深浅拷贝

XY_Mckevince的博客 1176

L2tp环境搭建笔记- Openwrt平台

本文使用3台openwrt设备, 分别搭建L2TP服务和2个客户端, 进行端到端验证和局域网组网,并分析搭建过程中涉及的默认路由( defaultroute) 配置问题。

十年通信老兵的技术修炼之路——从3G到5G,从地面基站到卫星通信。 3388

oc学习心得

oc学了将近1个月吧,临时断断续续学习的。因为我有其他语言的基础。学起来很快。 1.注意对objective-c基础的把握。其语法跟c语法很像。c语言的扩展。面向对象。Foundation框架封装了绝大多数类或者结构体。OC基础很重要。是学习UI的基础。 2.学了OC,不学UI,控件,相当于之前白学。因为就像你学了C或者C++却很难做出带页面的软件,还需要第三方库。 3.OC与UI交互,可以使用纯代码一个一个创建组件,也可以通过storyboard故事板拖控件实现,前者更灵活。后者开发速度快,也可以通过xi

A1521315qwss的博客 601

【Arduino 动手做】六舵机自平衡 Rotary Stewart 平台

《Arduino六舵机自平衡Rotary Stewart平台项目》 该项目展示了一个基于Arduino的六自由度Rotary Stewart平台,通过六个舵机实现动态平衡控制。设计采用激光切割框架和TAMIYA 70171套件,提供详细组装指南和开源固件(GitHub可获取)。开发者丹·罗耶分享了3D打印文件、视频演示及运动学优化需求,强调该平台可扩展应用于游戏控制(如Kerbal Space Program)或教育领域。项目链接包含完整资源包,鼓励用户参与改进并分享创作成果。该案例体现了Arduino在机

雕爷学编程 1087

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【iOS】—— 属性关键字及weak关键字底层原理

使用宏和常量所占用的内存差别不大,宏定义的是常量,常量都放在常量区,只会生成一份内存编译时刻:宏是预编译(编译之前处理),const是编译阶段。导致使用宏定义过多的话,随着工程越来越大,编译速度会越来越慢宏不做检查,不会报编译错误,只是替换,const会编译检查,会报编译错误。宏能定义一些函数,方法。const不能。1.通过计算对象地址的哈希值, 来从SideTables中获取对应的SideTable. 哈希值重复的对象的引用计数存储在同一个SideTable里.2.SideTable使用。

m0_62386635的博客 2147

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

浅谈属性关键字

文章目录关于我的仓库前言原子性atomic与nonatomic为什么会出现线程不安全读写权限内存管理内存管理四天王——ASWCassginstrongweakcopy杂鱼小虾总结默认关键字weak与assgin的区别 关于我的仓库 这篇文章是我为面试准备的iOS基础知识学习中的一篇 我将准备面试中找到的所有学习资料,写的Demo,写的博客都放在了这个仓库里iOS-Engineer-Intervi...

KevinAshen的博客 698

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

OC底层学习-Runtime

OC底层学习-Runtime1. 概述2.Runtime之 isa指针2. 面试题 1. 概述 Objective-C是一门动态性比较强的编程语言,跟C、C++等语言有着很大的不同 Objective-C的动态性是由Runtime API来支撑的 Runtime API提供的接口基本都是C语言的,源码由C\C++\汇编语言编写 2.Runtime之 isa指针 要想学习Runtime,首先需要了解底层的一些常用的数据结构,比如isa指针 在arm64架构之前,isa就是 一个普通的指针,储存着Cla

yong_19930826的博客 1306

OC 语法底层基础

OC 语法底层基础 文章目录OC 语法底层基础分类(实现机制,原理等)**分类都做了哪些事情?**特点**分类中都可以添加哪些内容?****Category的底层结构****分类加载调用栈:**实现原理Category 的加载处理过程常见面试题load 方法initialize 方法关联对象类和分类添加属性的区别分类添加“成员变量”关联对象的实现扩展(Extension 和分类的区别)一般用扩展做...

why_not_的专栏 476

【IOS 开发学习总结-OC-2】objective-c 数据类型

数据类型和运算符 objective-c 语言是一种面向对象的强类型语言。强类型就要求:所有的变量必须先声明后使用;指定的类型变量只能接受同样类型的值。强类型语言可以在编译的过程中发现源码的错误,保证了代码的健壮。 注释 几乎所有的编程语言都提供了注释的方法。代码是源代码的重要组成部分,对一份规范的程序源代码而言,注释应该占到源代码的1/3左右。 一般的编程语言都提供了单行注释和多行注释功

Albert的专栏 2270

OC 关联的使用

转载请标明出处:http://blog.youkuaiyun.com/zhangxingping 关联     关联是指把两个对象相互关联起来,使得其中的一个对象作为另外一个对象的一部分。     关联特性只有在Mac OS X V10.6以及以后的版本上才是可用的。 在类的定义之外为类增加额外的存储空间     使用关联,我们可以不用修改类的定义而为其对象增加存储空间。这在我们无法访问

学海无涯,回头是岸 1051
上一篇: 「OC」源码学习——类的加载
下一篇: YYModel源码学习
小鹿撞出了脑震荡
博客等级 码龄3年 1107粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值