OC中的Selector小解

PyTorch 深度学习实战(28):对比学习(Contrastive Learning)与自监督表示学习 本文实现了基于对比学习的自监督表征学习框架,通过 InfoNCE 损失在 CIFAR-10 数据集上学习到具有判别性的特征表示。实验表明,仅使用线性分类器即可达到 82% 以上的验证准确率,证明了对比学习的有效性。在下一篇文章中,我们将深入计算机视觉的核心任务之一——《目标检测与 YOLO 实战》,探讨如何利用深度学习实现高效的目标检测系统。 阅读详情

SEL 类成员方法的指针

可以理解 @selector()就是取类方法的编号,它的行为基本可以等同C语言的中函数指针,只不过C语言中,可以把函数名直接赋给一个函数指针,而Objective-C的类不能直接应用函数指针,这样只能做一个@selector()语法来取.

它的结果是一个SEL类型.这个类型本质是类方法的编号(函数地址).


下面给出两个例子,来简单实现selector的两个用法:

test1():模拟不同情境下,执行对象不同的方法;

test2():用选择器来实现对不同字段进行排序.


//
//  main.m
//  Selector
//
//  Created by MacroHong on 9/22/13.
//  Copyright © 2013 MacroHong. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Dog.h"
#import "Student.h"


void test1(void); // 选择器相当于函数指针变量
void test2(void); // 利用选择器给不同字段排序

int main(int argc, const char * argv[]) {
    @autoreleasepool {
//        test1(); // 选择器相当于函数指针变量
        test2(); // 利用选择器给不同字段排序
        
    }
    return 0;
}


void test1(void) {
    Dog *dog = [[Dog alloc] init];
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
    //定义并给选择器赋值
    
    SEL sel = @selector(run);
    // 利用选择器运行相应的方法
    [dog performSelector:sel]; // 相当于运行 [dog run];
    
    sel = @selector(jump);
    [dog performSelector:sel];
    
    sel = @selector(bark);
    [dog performSelector:sel];
    
    
#pragma clang diagnostic pop // ARC中加此三句可以消去内存泄露的警告
    
}

void test2(void) {
    NSArray *names = @[@"Tim", @"Bob", @"Alice", @"Ferry", @"Kitty"];
    NSMutableArray *stus = [[NSMutableArray alloc] init];
    
    for (NSString *name in names) {
        Student *stu = [[Student alloc] init];
        stu.name = name;
        stu.age = arc4random() % 90;
        stu.score = arc4random() % 100;
        
        [stus addObject: stu];
    }
//        [students sortUsingSelector:@selector(olderThanStudent:)];//年龄排序
//        [students sortUsingSelector:@selector(nameAfterStudent:)];//姓名排序
        [stus sortUsingSelector:@selector(scoreLowerThanStudent:)];//成绩排序

    for (Student * stu in stus) {
        NSLog(@"name:%@ age:%ld score:%ld", stu.name, stu.age, stu.score);
        
    }
    
}

//
//  Dog.h
//  Selector
//
//  Created by MacroHong on 9/22/13.
//  Copyright © 2013 MacroHong. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Dog : NSObject

-(void)bark;

-(void)run;

-(void)jump;

@end

//
//  Dog.m
//  Selector
//
//  Created by MacroHong on 9/22/13.
//  Copyright © 2013 MacroHong. All rights reserved.
//

#import "Dog.h"

@implementation Dog

-(void)bark {
    NSLog(@"Dog Won~ Won~");
}

-(void)run {
    NSLog(@"Dog run...");
}

-(void)jump {
    NSLog(@"Dog jump...");
}

@end

//
//  Student.h
//  Selector
//
//  Created by MacroHong on 9/22/13.
//  Copyright © 2013 MacroHong. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Student : NSObject


@property (copy) NSString * name;
@property NSInteger age;
@property NSInteger score;

/**
 年龄排序
 */
-(BOOL) olderThanStudent:(Student *)anotherStudent;

/**
 成绩排序
 */
-(BOOL) scoreLowerThanStudent:(Student *)anotherStudent;

/**
 姓名排序
 */
-(BOOL) nameAfterStudent:(Student *)anotherStudent;

@end

//
//  Student.m
//  Selector
//
//  Created by MacroHong on 9/22/13.
//  Copyright © 2013 MacroHong. All rights reserved.
//

#import "Student.h"

@implementation Student

-(BOOL) olderThanStudent:(Student *)anotherStudent {
    return self.age > anotherStudent.age;
}

-(BOOL) scoreLowerThanStudent:(Student *)anotherStudent {
    return self.score < anotherStudent.score;
}

-(BOOL) nameAfterStudent:(Student *)anotherStudent {
    return ([self.name compare:anotherStudent.name] == NSOrderedDescending);
}

@end


【ROS2实体机械臂驱动】封装珞石ROS2驱动库ros2_rokae_driver_lib 这一篇文章将封装为,和之前一篇文章《ROS2 编译、打包、封装三方库(Knet为例)_ros插件编译成静态库-优快云博客》写的封装,区别在于优化了cmake dependencies和include等属性和宏定义,同时对于多库内部依赖的情况做了特定处理,更加方便外部调用。其中珞石的编译参考博主之前的文章rokae xCoreSDK C++测试使用,这里不再做赘述。通过这篇文章对于如何打包机械臂厂家提供的三方库做了进一步说明,方便用于不同机械臂厂家的三方库封装调用。!! 阅读详情

相关推荐

抖音X-Medusa风控逆向:unidbg环境重建与魔改AES还原

X-Medusa并非传统加密算法,而是深度耦合运行时环境的动态混淆系统,其核心是硬件指纹感知、线程上下文绑定与非标AES变异。理解其原理需跳出‘找密钥’思维,转向对CPU型号、系统属性、微秒级时间及内存布局的综合建模。技术价值在于将不可控的客户端风控,转化为可复现、可配置、可运维的服务化能力;典型应用场景包括合规数据采集、API协议适配与移动安全研究。本文聚焦Android native层逆向实践,基于unidbg实现高保真环境模拟,并完整还原S-Box动态生成、MixColumns矩阵变异与轮密钥XOR扰

weixin_33783283的博客 686

OC中的selector浅析之一

选择器实质跟C语言的回调函数是一样的 例如下面一个例子#import &quot;Sum.h&quot;@implementation Sum -(void)run{ [self performSelector:@selector(sum:)];} -(void)sum:(NSString *)a{ NSLog(@&quot;你好&quot;); } @end打印结果: selector可以叫做选择器,其实指的就是对象的

图解AI 5390

海康工业相机触发模式详解:软触发 vs 外触发,在C#里如何选与用?

本文深入解析海康工业相机的软触发与外触发模式,详细比较两者的特性差异、适用场景及C#实现方法。通过海康SDK配置指南和实战代码示例,帮助开发者掌握工业相机触发模式的选择与优化技巧,提升自动化检测系统的精确性和可靠性。

weixin_42635064的博客 556

OC---- selector 选择器

SEL 全称叫 selector 选择器, 是一个数据类型(其实是一个类), 所以要在内存中申请空间存储数据 3.1 类是以Class对象的形式存储在代码段之中. 类名:存储的这个类的类名. NSString 3.2 还要将方法存储在类对象之中.如何将方法存储在类对象之中. 1). 先创建1个SEL对象. 2). 将方法的信息存储在这个SEL对象之中. ...

Damys 1102

【机械臂算法】机械臂动力学参数辨识仿真

本文以puma560m机械臂为例子进行动力学参数辨识的讲解,puma560m可以在robotic toolbox中找到,这里以它真实机械臂对他的动力学参数进行辨识。此外这里还有要说的是,机械臂参数辨识其实是一个系统工程,其中和系统的机械、电子、嵌入式都有着很深的联系,并不是仿真这么简单的。

vrijheid的博客 7834

weblogic 集群搭建,双机部署,相关问题记录

4.5.集群搭建1 参考网址https://wenku.baidu.com/view/76365129cd1755270722192e453610661ed95aa4.html IP地址 端口 角色 192.168.1.160 9001 AdminServer ...

zl386119974的专栏 1670

IOS SEL (@selector) 原理及使用总结(一)

SEL 类成员方法的指针 可以理解 @selector()就是取类方法的编号,他的行为基本可以等同C语言的中函数指针,只不过C语言中,可以把函数名直接赋给一个函数指针,而Object-C的类不能直接应用函数指针,这样只能做一个@selector语法来取. 它的结果是一个SEL类型。这个类型本质是类方法的编号(函数地址) C/C++函数指针 int test(int val)

fengsh998的专栏 10万+

告别C盘空间焦虑!Miniforge环境路径精准配置全攻略

本文深入解析Miniforge虚拟环境默认占用C盘空间的根本原因,即未正确配置`.condarc`文件中的`envs_dirs`路径优先级。通过详细的诊断步骤与配置命令,指导用户将环境路径精准迁移至指定磁盘(如D盘),并分享禁用自动激活、使用`--prefix`参数等高阶技巧,帮助开发者彻底告别C盘空间焦虑,实现虚拟环境的整洁与可控管理。

weixin_28831399的博客 238

OC学习--选择器(Selector)

选择器(Selector) OC中使用(selector)和 block(代码块)传递函数 SEL和id以及Class等都是OC里的数据类型,和int、float的地位一样。SEL变量可以存储selector数据。 可以通过@selector来获取某方法的selector。 SEL afun = @selector(someMethodName:::

thatday_csdn 1426

别再花屏了!手把手教你用STM32CubeIDE搞定LVGL 8.3移植(附完整源码)

本文详细介绍了如何在STM32CubeIDE环境下成功移植LVGL 8.3,解决常见的花屏问题。从环境配置、显示驱动优化到编译警告处理,提供完整的实战方案和源码示例,帮助开发者快速实现流畅的嵌入式GUI界面。特别针对STM32平台的DMA2D加速和内存管理进行了深度优化。

weixin_33739646的博客 243

《AI应用架构师:解锁AI智能体于经济学研究洞察经济趋势的关键密码》

当经济学家还在为“疫情后的消费复苏曲线”“ChatGPT对就业的长期影响”等非线性问题挠头时,AI应用架构师已经用AI智能体搭建了一个“数字经济沙盘”:里面有会砍价的消费者、会算成本的企业、会调政策的政府,每个智能体像真实角色一样思考决策,甚至能模拟出“政策出台3个月后失业率的微妙变化”。这篇文章将带你从架构师视角拆解:如何用AI智能体破解经济学研究的3大痛点(数据爆炸、非线性复杂、动态演化)?如何设计能“活起来”的经济智能体?如何用智能体模拟出能指导现实的经济趋势?

AI天才研究院 902

OC中的@selector

SEL参数: @selector(functionName:) 用于传入函数名作为参数。

q958812300的博客 811

SAP-ABAP:字符与数值类型转换详细指南

SAP-ABAP:字符与数值类型转换详细指南

baidu_35680696的博客 1481

OC 中方法名为什么被称作选择器(selector)?

函数调用和消息的一个关键区别是,函数和它的参数是在编译时绑定在一起的,而消息和接收者直到程序运行时,消息被发送才实现这种绑定。因此,响应一个消息的具体方法是在运行时才决定的,而不是在代码被编译的时候。消息启动哪个方法取决于消息的接收者,不同的接收者可能有同名的不同方法实体,这就是多态。编译器要为一个消息找到正确的方法实体,它必须知道这个接收者属于什么对象,也就是它属于什么类。这是一个对象在运行时接

MiracleDebris的博客 642

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

黑马程序员_OC中的selector

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ---------------------- 在OC中,selector在源代码中被用来指向一个对象的,selector代表这个方法的名称。selectors类型为SEL,所有名称相同的方法都有同样的selector。应该使用@selector()指令将方法名传递给编译的sel

conpgy的专栏 1297

计算机控制技术及应用

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

objective-c中的@selector()和 c /c++的函数指针

objective-c中的@selector()和 c /c++的函数指针、、、、、、 https://www.cnblogs.com/kubixuesheng/p/4321233.html objective-c中的@selector()和 c /c++的函数指针 讨论QQ群:待定 目录 欢迎关注 正文 先看tomcat里用到的代码: //然后开始动画 //把图片放到animationImages,接受数组参数 self.tom.animationI.

kuangben2000的博客 491

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

OC中message,method,selector之间的关系

selector是方法名 message包括selector和方法的参数 method包括selector和方法的具体实现 **Selector ** Selector 就是method的方法名称.我们非常熟悉的Selector有: alloc,init, release, dictionary...

weixin_34384681的博客 168

OC语法--多态的动态识别及@selector()预编译指令指定选择器

重写:子类方法覆盖父类方法,要求方法名和参数都相同。 重载:同一个类中的两个或两个以上的方法名相同,但是参数不同,方法体也不同。 多态动态识别 对象是不是aClass或其子类的成员? if([audi isKIndOfClass:[Car class]]){ NSlog(@“audi is a kind of Car"); } 对象是不是aClass成员? if([ca

IOS从零单排,天天学习,天天进步 745

OC学习:SEL类型数据和selector的用法

Objective-C中调用函数的方法是“消息传递”,这个和普通的函数调用的区别是,你可以随时对一个对象传递任何消息,而不需要在编译的时候声明这些方法。所以Objective-C可以在runtime的时候传递人和消息。 一、SEL  每个SEL类型数据都是一个方法。 SEL就是对方法的一种包装。包装的SEL类型数据它对应相应的方法地址,找到方法地址就可以调用方法。在内存中每个类的方法都存储在

iOS开发的学习笔记 4649

IOS SEL (@selector) 原理及使用总结(二)

SEL消息机制工作原理是什么  引用下面文章: 我们在之前有提到,一个类就像一个 C 结构.NSObject 声明了一个成员变量: isa. 由于 NSObject 是所有类的根类,所以所有的对象都会有一个 isa 的成员变量[公共继承].而该 isa 变量指向该对象的类(图3.15)[类在Objective-C中也是一个实体, 由于存在Objective-C 运行环境所有

fengsh998的专栏 2万+

OC中的selector选择子

Object-C中的@selector()可以看作C语言的中函数指针. 区别在于c语言中函数名可以直接赋给一个函数指针,而Object-C的类不能直接应用函数指针,这样只能做一个@selector语法来取. 它的结果是一个SEL类型。这个类型本质是类方法的编号(函数地址)。因此我们有如下代码。 一.取得selector值. 首先看C函数指针 int add(int val)

coder 1656

OC中的selector

@selector()基本可以等同C语言的中函数指针,只不过C语言中,可以把函数名直接赋给一个函数指针,而Object-C的类不能直接应用函数指针,这样只能做一个@selector语法来取. 它的结果是一个SEL类型。这个类型本质是类方法的编号(函数地址)?因此我们有如下代码。一.取得selector值. C函数指针 int add(int val) { return ...

weixin_30252155的博客 178

OC 中 objc_selector 结构体详解

找了很多资料都没有很明确很清晰的说清楚objc_selector 在OC中具体是什么情况 在iOS和MAC中 SEL就只是 一个 char *类型的字符串而已 而在 GUN OC 中 iOS和MAC 中 SEL typedef struct objc_selector *SEL;        struct objc_selector{   void *sel_id; 

jeffasd的专栏 4206

【iOS开发】SEL和Selector 原理小结

一 、Selector(选择器)简介选择器是用来选择一个方法来为一个对象 执行的名称,或是在编译源代码时替换该名称的 唯一标识符的名称。一个选择器本身不做任何事情。它简单地识别了一种方法。唯一使选择器的方法名称不同于普通字符串,编译器确保选择器是独特的。使一个选择器有用的是(在运行时)它就像一个 动态函数指针,对于一个给定的名称,自动指向一个方法的实现,适用于任何一个它所使用的类。假设你有一个run

Hanrovey Blog 4950

OC中关于几个判断对象归属及消息可用性的方法

关于几个判断对象归属及消息可用性的方法1、类的接口声明:有自定义的两个类,分别是Square和Rectangle。其中类接口声明如下所示: Rectangle 类接口: @interface Rectangle : NSObject-(void)sideOfOb; @endRectangle继承自NSObject。 Square类接口: @interface Square : Rectangle-(

Ray的博客 628

Swift中Selector概念及与OC中@selector比较

首先,@selector方法选择器是OC中很常用的一个关键字,无论是计时器相应方法,通知效应方法,按钮相应方法,自省判断是否能相应某个方法,都会用到@selector,OC中常用生成@selector的格式如下:- (void)func1{ } - (void)func1With:(id )obj{ } //生成选择器方法如下 SEL selector1 = @selector(func1);...

cewei711的博客 4734
上一篇: OC中关于时间的几个函数及格式化时间
下一篇: 清华某面霸收集的世界500强公司面试题目和点评
Micro90
博客等级 码龄12年 12粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值