首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Objective-C】Objective-C语言的动态性

Objective-C语言的动态性主要体现在以下3个方面   (1)动态类型:运行时确定对象的类型。   (2)动态绑定:运行时确定对象的方法。   ...一、动态类型   动态类型指对象指针类型的动态性,具体地说就是使用id类型将对象的类型推迟到运行时才确定,由赋给它的对象类型决定该对象类型(说起来怎么这么绕口),也就是说id修饰的对象是动态类型对象,其他在编译期指明类型的为静态类型对象...三、动态加载   动态加载分为两部分:动态资源的加载(如:图片资源),代码模块的加载;这些都是在运行时根据需要有选择性的添加到程序中的,是一种代码和资源的“懒加载”模式,这样降低编译时期对内存的开销,提供程序的性能...在消息传递机制中,当开发者编写[receiver message:xxx]语句进行发送消息后,编译器都会将其转换成objc_msgSend C语言的发送格式。...有了这些参数,objc_msgSend就能根据接收者的isa指针,到其对象的方法列表中以sel 的名称寻找对应的方法。

1.8K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Objective-C笔记

    因此本篇文章作为简单学习ObjC的记录,不会涉及太深入的语法特性,简而言之就是——够用就行。 什么是Objective-C Objective-C,简称OC,是一种通用、高级、面向对象的编程语言。...现在Objective-C与Swift是OS X和iOS操作系统、及与其相关的API、Cocoa和Cocoa Touch的主要编程语言。 Objective-C是C语言的严格超集。...这意味着任何C语言程序不经修改就可以直接通过Objective-C编译器, 在Objective-C中使用C语言代码也是完全合法的。...Objective-C被描述为盖在C语言上的薄薄一层, 因为Objective-C的原意就是在C语言主体上加入面向对象的特性。OC项目中常用的拓展名如下: 扩展名 内容类型 .h 头文件。...带有这种扩展名的源代码文件,除了可以包含Objective-C和C代码以外还可以包含C++代码。仅在你的Objective-C代码中确实需要使用C++类或者特性的时候才用这种扩展名。

    95740

    《Objective C编程》笔记

    id的含义是:指针,并可以指向任意类型的Objective-C对象,e.g.: id delegate 注意:以上声明没有用星号。id已经隐含了星号的作用。...c.如果你不拥有某个对象,但是要使用该对象的时候,可以向其发送release消息或者autorelease消息(release会使retain计数立刻减1。...15.C、C++、Objective-C这类语言的代码文件要经过两步才能完成编译。首先,预处理器(preprocessor)会读入并处理整个文件。...18.在Objective-C中,有三种途径可以实现回调。 a.目标-动作(Target-action):在应用开始等待前,要求“当X发生时,向指定的对象发送某个特定的消息。”...c.对于要触发多个(其它对象中)回调对象(如NSTimeZone),使用通告。 24.回调中的回收处理(防止内存泄露): a.通告中心不拥有其下的观察器。

    60930

    Objective-C对象引用

    一、引用 引用是iOS内存管理中的重要知识点,总所周知,iOS对象的内存管理是使用引用计数来表示的。一个对象只有在它的所有强引用都被释放后才能被回收。因此,一个对象的生命周期取决于其强引用的所有者。...您可能想要引用一个对象而不妨碍对象本身的回收。对于这种情况,您可以获取一个“弱”引用。弱引用是通过存储一个指向对象的指针创建的,而不是保留对象。...函数,初始化一个新的weak指针指向对象的地址。...clearDeallocating函数首先根据对象地址获取所有weak指针地址的数组,然后遍历这个数组把其中的数据设为nil,最后把这个entry从weak表中删除,最后清理对象的记录。...因为对象 A 的销毁依赖于对象 B 销毁,而对象 B 的销毁与依赖于对象 A 的销毁,这样就造成了我们称之为循环引用(Reference Cycle)。

    84520

    Objective-C中NSInvocation的使用

    OC中调用方法某个对象的消息呦两种方式: #1. performanceSelector: withObject: #2. NSInvocation...., 但只传递2个参数, 这样方法的第三个参数会自动取我们传的第二个的值 [self performSelector:@selector(printStr1:Str2:Str3:) withObject...方法找不到", NSStringFromSelector(aSelector)]; [NSException raise:@"方法调用出现异常" format:info, nil]; } 2、方法的参数个数与外界传进来的参数数组元素个数不符...//此处不能通过遍历参数数组来设置参数,因为外界传进来的参数个数是不可控的 //因此通过numberOfArguments方法获取的参数个数,是包含self和_cmd的,然后比较方法需要的参数和外界传进来的参数个数...,因此可以推断返回值的具体类型

    74920

    Objective-C 入门笔记

    简介 建立在C语言之上,可以混编C/C++代码,编写一个类需要二个文件: .h的头文件 .m的实现文件(如果是C/C++混编文件,文件后缀为.mm) 既然有头文件,所以很多人会拿它与C++进行类比,它最重要的三个特性是...:Message、Category、Protocol,与C++类比,二者之间的不同: 1、它没有new也没有delete,但有类似的方法alloc、dealloc; 2、不支持多继承,只支持单继承,但是提供了...Protocol; 3、它没有命名空间; 4、不支持内联函数; 5、不支持参数默认值; C++太过庞大,所以拿二者比较其实不是特别合适,跟Java相比,我觉得可能更适合一些吧 快速入门 1) 类的定义...3) 基本数据类型 OC建立在C语言之上,所以C中的所有基本数据类型它都支持,比如:int、float、char… OC自身定义的数据类型,都包含在Foundation中了,类名以NS开头,比如:NSArray...、NSInteger、NSNumber,定义:NSString *myStr; 更多关于Objective-C的学习资料,推荐 Ry’s Objective-C Tutorial

    66230

    Objective-C Runtime详解

    Objective-C Runtime 最近在学习Runtime的知识,恰巧发现了这篇博客《Objective-C Runtime》,在此基础上,进行了些许补充说明,如有错误或其他想法,欢迎提出交流。...而OS X较老的32位程序仍采用 Objective-C 1中的(早期)Legacy 版本的 Runtime 系统。...,但我们仍能从中获得一些有价值的信息,有兴趣的可以查看源代码 Objective-C 2.0 的头文件虽然没暴露出objc_class结构体更详细的设计,我们依然可以从Objective-C 1.0 的定义中小窥端倪...参考链接 原文:Objective-C Runtime Apple官方文档:Objective-C Runtime Programming Guide Apple开源代码:Objective-C Runtime...源码 Objective-C runtime之运行时的基本特点 Understanding the Objective-C Runtime 最后,附上Runtime的基本使用:《Objective-C

    1.8K60

    Objective-C混淆代码

    一、利用class-dump来查看源文件 class-dump是一个逆向工具,可以用来查看未加固的APP的方法名和属性名 安装class-dump 从class-dump下载地址将dmg文件下载下来,将...Users/imac/Desktop/heads 其中/Users/imac/Desktop/Payload/test.app是源文件路径, /Users/imac/Desktop/heads是要导出的头文件的路径...可以在head文件夹里看到包含第三方库的头文件,里面可以看到属性名和方法名 二、混淆代码 在项目里添加两个文件confuse.sh、func.list 在funlist里写上你要混淆的字符串; 在confuse.sh...STRING_SYMBOL_FILE="func.list" HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/codeObfuscation.h" export LC_CTYPE=C...| sqlite3 $SYMBOL_DB_FILE } ramdomString() { openssl rand -base64 64 | tr -cd 'a-zA-Z' |head -c

    70120

    Objective-C 数组筛选

    直接遍历数组,取符合条件的对象放到一个新数组效率可能不高。...下面介绍一个更简便的方法来实现 简介 NSPredicate类主要用来指定过滤器的条件,该对象可以准确的描述所需条件,对每个对象通过谓词进行筛选,判断是否与条件相匹配。...谓词是指在计算机中表示计算真假值的函数。原理和用法都类似于SQL查询中的where,作用相当于数据库的过滤取。主要用于从集合中分拣出符合条件的对象或者数据模型,也可以用于字符串的正则匹配....一般的, NSPredicate的筛选过滤的条件可以是, 逻辑运算符号(> , 的包含/匹配/模糊搜索(BEGINSWITH,ENDSWITH,CONTAINS...NSPredicate创建的过滤条件 [predicate evaluateWithObject:model]; 3.将array通过创建的predicate进行过滤,并返回符合条件的数据 NSArray

    1.4K10

    Objective-C中小怪兽的逻辑

    学习Objective-C的面向对象也有一段时间了,为了犒劳自己的学习成果,写个小怪兽来犒劳一下自己把。在LOL中有怪兽和英雄的角色吧,接下来就先写一个小怪兽的类吧。...从小怪兽的角度来讲,怪兽都有那些行为和属性呢?最重要的两点是小怪兽要打英雄对吧,“攻击英雄”的行为是少不了的,另一个是小怪兽打不过怎么办呢?打不过就跑呗,顺理成章,得有“逃跑”行为吧。...小怪兽在攻击英雄的同时生命力是由变化的,会由一个值变到另一个值,所以得有“当前的生命力”和“原来的生命力”,同时“攻击力”和“防御力”对于小怪兽来说也是必不可少的,移动时得有“当前位置”和“原来位置”。...1 // 2 // Location.m 3 // HelloOC 4 // 5 // Created by ludashi on 14-7-27. 6 // Copyright (c)...通过小怪兽的逻辑希望大家会更好的理解面向对象的思想。

    58460
    领券