Swift语言引入了协议、协议的扩展、泛型等新特性,因此使用Swift语言可以很好地面向协议编程;Swift语言将函数和闭包提升为语言的一等公民,函数可以作为一个变量、可以作为其他函数的参数、作为其他函数的返回值等来传递,所以我们可以使用Swift来进行函数式编程,另外Swift也提供了很多高阶函数来辅助我们进行函数式编程;Swift也提供了属性的权限限定等面向对象的基础设置,因此在Swift中也可以面向对象来编程。
Objective-C是一种很优美的语言,至少在我使用其进行编程的过程中,是很享受他那近乎自然语言的函数命名、灵活多样的方法调用方式以及配合IDE流顺畅快编写体验。Objective-C是扩展与C面向对象的编程语言,然而其方法的调用方式又和大多面向对象语言大有不同,其采用的是消息传递、转发的方式进行方法的调用。因此在Objective-C中对象的真正行为往往是在运行时确定而非在编译时确定,所以Objective-C又被称为是一种运行时的动态语言。
为什么突然要搞ObjectiveC?因为清明比较闲,两三天正好用来学习下iOS的逆向分析。 逆向的第一步当然是先从正向了解,否则给你源代码都看不懂,反编译出来的就更别提了。 因此本篇文章作为简单学习ObjC的记录,不会涉及太深入的语法特性,简而言之就是——够用就行。
Objective-C是面向对象语言,但其中又并非全部是对象。在初学这门语言时,我常常从意识上将NS开头的类型与C语言原本的那些类型分割开来,假装他们之间没有联系,只关注“类”的世界。然而类终究只是一种应用上的抽象,就像“语法糖”一样,抛开华丽的外表,内部依然是最朴素的结构体和指针。本篇博客的来由源自朋友的一个问题:在ARC环境,performSelector:withObject:方法如何传递非对象类型的数据呢?这个问题乍看起来简单,但要较较真,却也并非那么简单。下面的内容都是有这个简单的问题引出的,如果你感兴趣,在读之前可以先试着解决下上面的疑问。
Swift 中类,结构体和枚举等类型支持计算属性和下标,这些计算属性和下标作为类型的成员,当获取或者设置这些成员时,他们触发程序员指定的计算。最近被接受的提案 SE-0296 介绍了通过和async和await来实现异步函数,但是没有指明计算属性和下标可以支持类似async这种异步效果。此外,为了充分利用async属性,用来指定一个属性throw同样重要。本文旨在通过为有效的只读属性和下标提供语法和语义来填补这部分空白。
WWDC 2017 带来了很多惊喜,在这次大会上,Swift 4 也伴随着 Xcode 9 测试版来到了我们的面前,虽然正式版要8月底9月初才会公布,但很多强大的新特性正吸引我们去学习它。根据大会上已经开放的新特性,先一睹为快。 体验 Swift 4包含在Xcode 9中,您可以从Apple的开发者门户下载最新版本的Xcode 9(您必须拥有一个活跃的开发者帐户)。 每个Xcode测试版将在发布时捆绑最新的Swift 4快照。在阅读时,您会注意到[SE-xxxx]格式的链接。 这些链接将带您到相关的Swif
是什么因素使一个程序成为Cocoa程序呢?不是编程语言,因为在Cocoa开发中你可以使用各种语言;也不是开发工具,你可以在命令行上就可以创建Cocoa程序。Cocoa程序可以这么说,它是由一些对象组成,而这些对象的类最后都是继承于它们的根类 :NSObject。而且它们都是基于Objective-C运行环境的。
Runtime简称运行时,就是系统在运行时一些机制,其中最主要的是消息机制。 Runtime基本是用C和汇编写的,从而有了动态系统的高效。
苹果官方文档Objective-C Runtime Programming Guide
本文收录总结了常见的 Swift 和 Objective-C 的面试题,希望对大家有所帮助。
| 导语JavaScript越来越多地出现在我们客户端开发的视野中,从ReactNative到JSpatch,JavaScript与客户端相结合的技术开始变得魅力无穷。本文主要讲解iOS中的JavaScriptCore框架,正是它为iOS提供了执行JavaScript代码的能力。未来的技术日新月异,JavaScript与iOS正在碰撞出新的激情。 作者:殷源--腾讯移动端工程师 @IMWeb前端社区 JavaScript越来越多地出现在我们客户端开发的视野中,从ReactNative到JSpatch,Jav
整理自:IOS 整体框架类图值得收藏 一 整体框架 在iOS开发过程中,对iOS整体框架的了解和学习是必不可少的一个环节,今天我们就好好来了解一下iOS的整体框架。首先贴一个关于iOS的框架介绍:iOS系统框架概述。我们通常称呼iOS的框架为Cocoa Touch框架,Cocoa Touch是一个框架的集合,里面包含了众多的子框架。每一个子框架都是一个目录,包含了共享资源库,用于访问该资源库中储存的代码的头文件,以及图像、声音文件等其他资源,共享资源库定义应用程序可以调用的函数和方法。框架中的类相互
对于子类 B重写父类 A方法 method2在 iOS6.0之后才可以用是错误的,因为父类方法是可以在 iOS5.0就可以用的。
Tips:苹果公开的源代码在这里可以查,https://opensource.apple.com/tarballs/
一、swift简史 1、介绍 swift是苹果公司于2014年推出用于撰写OS和iOS应用程序的语言。它由苹果开发者工具部门总监“克里斯.拉特纳”在2010年开始着手设计,历时一年完成基本的架构。到后来苹果公司大力投入swift语言的研发,于2014年发布这一语言的第一版本。swift2.0之后的语法则趋于稳定,2017年发布的swift4.0虽有改动,但也只是增添了一些新特性。这些新特性需要在Xcode9上运行才能显示出效果。值得一提的是它支持unicode9,也就是说,可以用某些图片图标来充当变量。
由上面一章中,我们了解了什么是RunTime,RunTime用来做什么,下面了解一下Runtime数据结构。
@property 只是一个编译器指令,意思是告诉编译器要干嘛,当然它的意思就是要求 Xcode 做属性声明了。
今天整理了下自己电脑里的一些碎片笔记,时间有限只整理了这篇文章——类的本质,大家可以进行参考。
把包装类型转换成简单数据类型称为unboxing(示例:Integer i=1,int p=i;//将包装类Integer转化成简单数据类型int)
一、 什么是runtime? 二、 runtime 版本 三、 与 runtime 的三种交互方式 四、 消息机制的基本原理与执行流程 五、 动态解析与消息转发
一、选择题(共80题,每题1分) 1、 不会立马使引用计数器改变的是: 答案:(C) A、release B、alloc C、autorelease D、retain 2、 在OC中类的接口声明keyword为: 答案:(B) A、@import B、@interface C、@implemention D、@protocol 3、 NSString *name = [[NSString alloc]initWithString:@”张三”];NSLog(@”%d”,[name retainCount]);上述代码打印结果是: 答案:(A) A、-1 B、0 C、1 D、2 4、 下列选项中所有属于对象的是: 答案:(C) A、我的白色iPhone4s;Mac Mini B、狗;老虎 C、邻居家的猫咪“贝贝”;我的弟弟“张三” D、保时捷;犀利哥 5、 NSDictionary *dict = [NSDictionary dictionaryWithObject:@”a value” forKey:@”aKey”];NSLog(@”%@”,[dict objectForKey:@”aKey”]);[dict release];控制台中打印的最后一条信息会是: 答案:(C) A、a value B、aKey : a value C、崩溃信息 D、a value : aKey 6、 现有例如以下集合,能准确删除“张三”的代码是:NSMutableDictionary * peoples=[NSMutableDictionary dictionaryWithObjectsAndKeys:@”张三”,@”左护法”,@”李四”,@”右使”,@”唐sir”,@”老大哥”, nil]; 答案:(A) A、[peoples removeObjectForKey:@”左护法”]; B、[peoples removeObject:@”张三”]; C、[peoples removeObjectAtIndex:0]; D、[peoples removeAllObjects]; 7、 关于类和对象的概念,下列属于对象的是: 答案:(C) A、奥迪A6 B、保龄球 C、世界冠军刘翔 D、西红柿 8、 下面说法不对的是: 答案:(A) A、nonatomic:提供多线程保护,提高性能,在没有使用多线程的编程中能够选择使用。 B、assign:属性默认值。说明设置器直接进行赋值。针对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char)等等。
根据上一篇博客iOS-class、object_getClass、objc_getClass、objc_getMetaClass区别的研究发现,发现主要还是class方法和objc_getClass方法的区别,因此本篇文章主要讲述一下class方法和objc_getClass方法。
在指定要最小化的目标函数时,Hyperopt提供了几个灵活性/复杂性逐渐增加的级别。作为设计者需要考虑的问题是:
本期是 Swift 编辑组自主整理周报的第十二期,每个模块已初步成型。各位读者如果有好的提议,欢迎在文末留言。
概述 常说Objective-C是一门动态语言,那么问题来了,这个动态表现在那些方面呢? 其实最主要的表现就是Objective-C将很多静态语言在编译和链接时做的事情放到了运行时去做。 它在运行时实现了对类、方法、成员变量、属性等信息的管理机制,同时,运行时机制为我们开发过程提供很多便利之处,比如: 在运行时创建或者修改一个类; 在运行时修改成员变量、属性等; 在运行时进行消息分发和分发绑定; ...... 与之对应实现的就是Objective-C的Runtime机制。 Runtime基本是C和汇编编写的
atomic: 原子操作(原子性是指事务的一个完整操作,操作成功就提交,反之就回滚. 原子操作就是指具有原子性的操作)在objective-c 属性设置里面 默认的就是atomic ,意思就是 setter /getter函数是一个原子操作,如果多线程同时调用setter时,不会出现某一个线程执行完setter所有语句之前,另一个线程就开始执行setter,相当于 函数头尾加了锁 . 这样的话 并发访问性能会比较低 . nonatomic: 非原子操作 一般不需要多线程支持的时候就用它,这样在 并发访问的
前面讲完拦截URL的方式实现JS与OC互相调用,终于到JavaScriptCore了。它是从iOS7开始加入的,用 Objective-C 把 WebKit 的 JavaScript 引擎封装了一下,提供了简单快捷的方式与JavaScript交互。 关于JavaScriptCore的使用有两篇很好的文章: NSHipster中文版的JavaScriptCore iOS7 新JavaScriptCore框架入门介绍
在上篇文章Objective-C Runtime:深入理解类与对象中,讲解了类与对象的相关内容。
有关Runtime的知识总结,我本来想集中写成一篇文章的,但是最后发现实在是太长,而且不利于阅读,最后分成了如下几篇:
今天是元宵节,祝大家元宵节快乐!在Swift中的数组和字典中下标是非常常见的,数组可以通过索引下标进行元素的查询,字典可以通过键下标来获取相应的值。在使用数组时,一个常见的致命错误就是数组越界。如果在你的应用程序中数组越界了,那么对不起,如果由着程序的性子的话是会崩溃的。为了防止崩溃呢,我们会对集合做一些安全的处理。比如对数组进行扩展,从而对数组的索引进行安全检查,保证数组的index在正常范围内。在Objective-C中也是经常对数组,字典等做一些处理操作。 今天的博客的主要内容是先对Objec
常说Objective-C是一门动态语言,那么问题来了,这个动态表现在那些方面呢?
OCHamcrest是OC的断言框架,提供更友好的断言接口。 OCHamcrest的断言方法都是以assertThat为前缀的。
如果一个函数除空行和注释以外的内容超过了80 行,则可以思考,能否在不破坏程序结构的前提下,对函数进行拆分。
Effective+Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法
本 Session 讲了为了让你的应用包体积更小,运行更快,启动速度更快,我们对 Swift 和 Objective-C 运行时做了怎样的优化。同时通过本 Session 你将发现如何通过高效的协议检查,更小的消息发送,以及优化后的 ARC 机制,来提高你的 App 性能。
iOS开发入门笔记 本文面向已有其它语言(如Java,C,PHP,Javascript)编程经验的iOS开发初学者,初衷在于让我的同事一小时内了解如何开始开发iOS App,学习目标包括: 能使用Xcode IDE、模拟器 能修改、调试已有iOS App 能在已有应用内创建新模块 能创建新应用 能发布应用到App Store 本文不包含任何高级的iOS开发知识,已学会iOS开发的同学不要看,看完这篇文章学会了的同学也不用再看了。 不仅是学习一门新语言 有过脚本开发经验的人(如Javascript,PHP,S
[receiver message]不是一个简单地方法调用,而是在编译阶段被编译器转化为
我们都知道,将源代码转换为可执行的程序,通常要经过三个步骤:编译、链接、运行。不同的编译语言,在这三个步骤中所进行的操作又有些不同。
在iOS开发中,Protocol是一种经常用到的设计模式,苹果的系统框架中也普遍用到了这种方式,比如UITableView中的<UITableViewDelegate>,以及<NSCopying>、<NSObject>这样的协议。我想大家也都自定义过协议,一般都用于回调,或者数据传递。
http://yulingtianxia.com/blog/2014/11/05/objective-c-runtime/
Objective-C Runtime 最近在学习Runtime的知识,恰巧发现了这篇博客《Objective-C Runtime》,在此基础上,进行了些许补充说明,如有错误或其他想法,欢迎提出交流。 目录 引言 简介 与Runtime交互 RunTime术语 消息 动态方法解析 消息转发 健壮的实例变量 动态添加属性(Object-C Associated Objects) 方法调剂(Method Swizzling) 总结 引言 Objective-C的方法调用实则为“发送消息”,我们来看[dog
多年来,Objective-C语言已经有了革命性的发展。虽然核心理念和实践保持不变, 但语言中的部分内容经历了重大的变化和改进。现代化的Objective-C在类型安全、 内存管理、性能、和其他方面都得到了增强。使你更容易编写正确的代码。在你现有 和未来的代码中使用这些改进是很重要的,会使你的代码一致、可读、灵活。
2015 年 WWDC,苹果第一次提出了 Swift 的面向协议编程(Protocol Oriented Programming,以下简称 POP ),这是计算机历史上一个全新的编程范式。在此之前,相对应的面向对象的编程(Object Oriented Programming,以下简称 OOP )已经大行其道 50 年,它几乎完美的解决函数式编程(Functional Programming)的缺点,并且出现在从大型系统到小型应用、从服务器端到前端的各个方面。它的优点被无数程序员称颂,它解决了诸多开发中的大小问题。那么问题来了,既然 OOP 如此万能,为什么 Swift 要弄出全新的 POP ?
现在已经不断有网友发我他们在面试中遇到的面试题,这是一位程序媛前面在面试中遇到的问题
在 WWDC2020 中 Objective-C 运行时的改进这个视频提到关于类的的数据结构的一些变化,本文是对这个视频提到的部分变化进行翻译。
领取专属 10元无门槛券
手把手带您无忧上云