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

Activity 的 onCreate() 方法为什么获取 View 的宽和高0

Activity 的 onCreate() 方法为什么获取 View 的宽和高0 ?...width = myview.getWidth(); int height = myview.getHeight(); Log.i(TAG, methodTag + ": width...| height=0 如上面代码结果所示,Activity的onCreate()方法我们尝试获取控件的宽和高,却获取得是0,这是因为 View 绘制和 Activity 的生命周期方法并不同步,即使... Activity ,当对所有的 View 初始化完毕后,会回调 onWindowFocusChanged() 方法。...---- 最后想说的是,本系列文章博主对Android知识进行再次梳理,查缺补漏的学习过程,一方面是对自己遗忘的东西加以复习重新掌握,另一方面相信重新学习的过程定会有巨大的新收获,如果你也有跟我同样的想法

1.2K30

Swift基础语法

CODE上查看代码片派生到我的代码片 var welcomeMessage: String 声明的冒号代表着“是…类型”,所以这行代码可以被理解:“声明一个类型String,名字welcomeMessage...CODE上查看代码片派生到我的代码片 let cat = “ 整数 整数就是没有小数部分的数字,比如42和-23。整数可以是有符号(正、负、)或者无符号(正、)。...CODE上查看代码片派生到我的代码片 let meaningOfLife = 42 // meaningOfLife 会被推测 Int 类型 同理,如果你没有给浮点字面量标明类型,Swift 会推测你想要的是...)”) // 输出 “The status code is 404” 此外,你还可以通过下标来访问元组的单个元素,下标从开始: [objc] view plain copy print?...// surveyAnswer 被自动设置 nil 注意:Swift 的nil和 Objective-C 的nil并不一样。 Objective-C ,nil是一个指向不存在对象的指针。

1.4K60
您找到你想要的搜索结果了吗?
是的
没有找到

Swift编译之SIL(Swift Intermediate Language)

load A:从 A 读取数据。 store A to B:将 A 的值存储到 B 。 sil_global:全局变量。 alloc_global:开辟全局变量的内存。...// 表示最终的、经过规范化的SIL代码 sil_stage canonical // 内建模块,提供了一些底层的内建函数和类型,这些函数和类型通常用于Swift编译器生成的代码,执行一些特定的低级操作...// users: %2, %1 bb0(%0: $Person): // 调试参数"self"创建一个调试值 debug_value %0: $Person...thunk实现,将@objc修饰的Person.say()映射到Swift的main.Person.say()方法 // @objc Person.say() sil private [thunk]...thunk实现,将@objc修饰的Person.init()映射到Swift的main.Person.init()方法 // @@objc main.Person.init():指明这个协议见证是Person

19041

窥探Swift之数组与字典

还是沿袭之前的风格,介绍Swift的数组时,我们会对比一下ObjC的数组和字典,因为ObjC也是iOS开发的主要语言不是。...Swift也不例外,Swift的数组使用起来还是比较人性化的. 1.数组的声明与创建 Swift的Array声明创建之前,我想聊一下ObjC数组的声明与创建,下方是ObjC不可变数组和可变数组的创建方式...有一点需要注意的是ObjC的数组只允许往里面存储对象,而不允许往里存储基本数据类型(Int, Float等)。而在Swift是允许把基本数据类型存入数组的,如下方代码段所示。...Swift往数组插入元素和OC中使用的方法是一样的,只是调用方法的方式不同。下方代码就是往可变数组arrayTest的索引1的位置插入一个值“Objc”。语法比较简单就不做过多的赘述了。...举个栗子~,比如我们要使用一个数组来记录公司每个季度的销售额,在数组初始化时,我们给给数组初始化4个初始值的元素。接下来就使用Array构造函数来做一些事情。下方就是在数组创建时给数组赋初始值。

1.8K90

Swift| 基础语法(四)

Swift 的闭包有很多优化的地方: 1 根据上下文推断参数和返回值的类型 2 从单行表达式闭包隐式返回 可以省略return 3 可以使用简化的参数如 $0 $1 意为从0或者1开始 4 提供了尾随闭包的语法...闭包的循环引用问题 Swift开发,有一个原则就是能不写self就不写self,但是闭包必须写上self; 这是因为闭包是用来保存一段代码,而且系统也不知道这段代码具体的调用时间, 所以为了保证闭包的对象不被释放...func FF1(a:String) //必须实现的 @objc optional func FF2(aa:String) //可以选择是否实现的 } /*声明的protocol为什么要用...() 要有个问号呢 原因是OC的代码, 用respondsToSelector()方法来判断是否实现了方法。 而在swift 中就直接可以用 ?...@objc var age: Int = 0 //构造方法 init(dict: [String : AnyObject]){ super.init() setValuesForKeys

1.3K10

OC对象原理(二)

objc_alloc的分析 运行时,alloc方法流程分析 int main(int argc, const char * argv[]) { @autoreleasepool {...此时我不禁就有疑问了,为什么这里的objc_alloc是一种符号形式(symbol stub for: objc_alloc)呢,为什么没有走消息转发(objc_msgSend)呢?...将代码转成汇编之后,带有objc_messageSend的就是一般的消息发送,带有symble stub for的就是特殊的消息发送。...也许你会有一个疑问,为什么参考因素是对象的成员的时候是8字节对齐,而参考因素是对象的时候就是16字节对齐呢?...而上面第四步也是0x00000001074b11d8,所以说,上面第四步的NSObject是根元类。 Clang编译 我们研究的过程,经常会需要将OC代码编译成C++,如何编译呢?

68610

Swift5.0的Runtime机制浅析

(obj2); swift_release函数内部会在引用计数0时调用模块名.类名....每一个方法调用都是通过读取方法虚表的索引获取到了方法函数的真实地址,然后再执行间接调用。...这样访问对象的属性时会通过偏移表的偏移量来读取偏移信息,然后再根据偏移量来读取或设置对象的成员变量数据。...机器指令层面以arm64体系结构例,对象是保存在x0寄存器作为参数进行传递。而在Swift的对象方法这个规则变为对象不再作为第一个参数传递了,而是统一改为通过寄存器x20来进行传递。...比如下面的类代码优化模式下的Swift语言源代码和C语言伪代码实现: ////////Swift代码 //类定义 class CA { open func foo(_ a:Int, _ b:Int

2.2K21

swift底层探索 05 -深入探讨swift的方法调用机制swift底层探索 05 -深入探讨swift的方法调用机制

swift底层探索 03 - 值类型、引用类型一文解释过值类型和引用类型的内存布局。像这样: ?...图二 找到了方法的地址0x100002bd0并且存在代码段,但是没法找到和结构体的关系。 machOView查看 ? 图三 这部分内存是程序编译链接的时候就已经生成好的。...所以说结构体方法在编译链接阶段已经确定了,并保存到符号表 ? 图四 符号表依旧可以找到方法的指针0x100002bd0,而且发现方法名是存在String Table的。...*0x50(classfunc1) -> *0x58(classfunc12两个方法在内存里是连续的。 swift函数表初始化源码 通过汇编的查看知道了方法和类本身的关系的,方法是如何存储的呢? ?...ocmethod_list是一个二维数组包含:普通方法(包含父类方法)数组、类别方法数组. swift-vtable class superClass{ func superClassfunc1

1.1K30

Swift基础语法(四)

所以Swift5,新增了一个枚举Result,使我们能够更简单、更清晰地处理复杂代码的错误。...源文件:单个Swift代码文件。注意,模块是包含源代码的。 访问权限 访问权限从大到小依次: open:允许实体被定义模块的任意源文件访问,也可以被另一模块的源文件通过导入该定义模块来访问。...4,Swift文件内容如下: import UIKit class NormanPerson: NSObject { //Swift代码,将需要暴露给OC调用的属性和方法前面加上@objc...6,OC代码调用Swift: #import "ViewController.h" //导入"项目名-Swift.h文件" #import "NormanOC-Swift.h" @interface...为什么需要命名空间 简而言之就是一句话:为了避免命名上的冲突。 开发,尤其是多模块开发,很难保证模块之间的类名不会重复。为了保证不同模块下同名的类可以正常使用而不报错,此时就需要命名空间了。

3.9K20

类的加载(一)

我们会将镜像文件给读取出来存储到内存,比如镜像文件的类、协议、方法、分类等,这些信息会存储到表结构。...这里使用NXCreateMapTable来创建缓存表,表主要存储的就是上面那些从mach-o镜像文件读取出来的各种结构。...然后遍历类列表,每一次遍历里面,都是先通过下标获取到类的地址,然后再去通过地址读取类的相关信息。 我们通过readClass函数来读取类的相关信息,如下: ?...通过源码我们可以知道,methodizeClass函数做的事情就是将在Mach-O内存段读取到的ro的内容复制一份到rw。 此时你可能会有一个疑问,为什么我们直接使用ro不就可以了吗?...也就是说,ro(readOnly)是读取的Mach-o内存段的最原始数据,它是干净的,要保证其不备污染,所以它是只读的;而rw(readWrite)是ro的基础上,还会有其他的内容动态增加。

48710

Swift 周报 第三十四期

图片来源:苹果官网 疫情期间,苹果公司没有提高美国新款 iPhone 的价格,尽管该公司面临部件短缺,并表示通货膨胀导致了一些服务(如运输和部件)的成本上升。...,数据库可能会以错误的顺序执行,打印出: delete 0 insert 0 GCD 世界,会在串行队列上执行数据库写入操作,但是使用 Swift Concurrency 似乎没有很好的方法来模拟这种行为...second: 0) // 枚举 case 'tuple' 需要一个类型 'Tuple' (也就是 '(first: Int, second: Int)') 的单一参数 } 可以使用两个单独的变量匹配一个接受元组的枚举...给定以下代码: class A { } func b() { _ = A.self as AnyObject } 编译器函数 b 生成以下原始 SIL 代码: %0 = metatype $@...因此,唯一100%正确的选择是(2)方面更加保守,从而为这种罕见的使用情况提供好处,但同时其他所有人带来不必要的操作成本。 讨论为什么会有这种设计模式?

17340

iOS-Swift 方法

@objc 该关键字可以将 Swift 函数暴露给 objc 运行时,与 OC 交互,但依旧是函数表派发。 那么,@objc + dynamic 就会变成消息派发的方式-也就是 OC 的消息传递。...实现,会默认有一个参数 - SHPoint,其实这个参数就是 SHPoint 的实例 - self,这也是为什么我们方法可以调用 self....代码如下: 我们打来断点,进入查看当前调用的汇编代码: 可以发现, Swift ,调用一个结构体的方法是直接拿到函数的地址直接调用,包括初始化方法,没有 OC 那么复杂的流程。...将内存的值读取到寄存器,如: ldr x0, [x1, x2] // 将寄存器 x1 和寄存器 x2 的值相加作为地址,取该内存地址的值放入寄存器 x0 (滑动显示更多) cbz: 和 0 比较...,如果结果就转移(只能跳到后面的指令)。

3K40

汇编寄存器的规则

在上面的示例,有几个寄存器,显示 rbx 、 rsp 、 rdi 和 rbp 。前面的 % 告诉您这是一个寄存器。 此外,您还可以找到一个十六进制的数字常量,如 0x228。... LLDB 寄存器加上 $ 字符很重要,因此 LLDB 知道您需要的是寄存器的值,而不是源代码与范围相关的变量。 是的,这与您在刚刚反汇编视图中看到的汇编不同! 烦人吧?...注:善于观察的你可能已经注意到了 OC 代码打断点, LLDB 的回溯内看不到 objc_msgSend 的影子。这是因为 objc_msgSend 方法簇执行了 jmp。..., two: Swift.Int, three: Swift.Int, four: Swift.Int, five: Swift.Int, six: Swift.Int, seven: Swift.Int...您可能还会注意到其他参数存储在其他一些其他寄存器。 确实如此,但这只是其余参数设置堆栈的代码的剩余部分。 请记住,第六个参数之后的参数将进入堆栈。

2.4K50

NSObject头文件解析 消息机制 Runtime解读 (一)

例子: 类的实现文件重写doesNotRecognizeSelector方法, 增加打印一行字, 注意自定义的内容要写在调用父类方法前面, 否则调用父类方法就直接crash了, 不会继续执行后面的内容...); // 输出:Person Class isa: 需要注意的是Objective-C,所有的类自身也是一个对象,这个对象的Class里面也有一个isa指针,它指向metaClass(元类) 元类对象...(不能获取@property修饰的属性变量), 举例: 我们有一个ClassA, 添加一个私有成员属性 @interface ClassA : NSObject<NSCopying, NSMutableCopying...变量, 用来保存方法个数 unsigned int count = 0; //获取方法列表数组 Method *methods = class_copyMethodList..., &count); NSLog(@"获取到的属性个数: %d", count); for (int i = 0; i < count; i ++) {

1.1K31

Swift 4.0 新特性

Shakeable).shake() } } } Swift 4,如果将类型和协议用 & 组合在一起使用,代码就可以这么写了。...支持通过下标来读写容器的数据,但是如果容器类的数据类型定义泛型,以前的下标语法就只能返回 Any,取出值后需要用 as?...这个 family 是一个由多个字符组合成的字符,打印出来的结果 一个家庭。上面的代码 Swift 3 打印的 count 数是 4, Swift 4 打印出的 count 是 1。...,然后把 Swift 要调用的 Objective-C 类的头文件都写在里面,编译器会读取 Bridging Headers 的头文件,然后生成一个庞大的 Swift 文件,文件内容是这些头文件内的... Swift 3 ,编译器会在很多地方为我们隐式的加上 @objc,例如当一个类继承于 NSObject,那么这个类的所有方法都会被隐式的加上 @objc

1.7K90
领券