iOS-笔试面试
2015-08-24 09:38
295 查看
1.孙源的面试题
问题:http://blog.sunnyxx.com/2015/07/04/ios-interview/答案:https://github.com/ChenYilong/iOSInterviewQuestions
2.唐巧的面试题
1)问题 :一个 Objective-C 对象的内存结构是怎样的?
答案
这是一道老题,或许很多人都准备过,其实如果不是被每个公司都考查的话,这道题可以看看候选人对于 iOS 背后底层原理的感兴趣程度。真正对编程感兴趣的同学,都会对这个多少有一些好奇,进而在网上搜索并学习这方面的资料。以下是本题的简单回答:
如果把类的实例看成一个C语言的结构体(struct),它首先包含的是一个 isa 指针,而类的其它成员变量依次排列在结构体中。排列顺序如下图所示:
为了验证该说法,我们在Xcode中新建一个工程,在main.m中运行如下代码:
#import <UIKit/UIKit.h> @interface Father : NSObject { int _father; } @end@implementation Father @end @interface Child : Father { int _child; } @end @implementation Child @end int main(int argc, char * argv[]) { Child * child = [[Child alloc] init]; @autoreleasepool { // ... } }
我们将断点下在
@autoreleasepool处,然后在Console中输入
p *child,则可以看到Xcode输出如下内容,这与我们上面的说法一致。
(lldb) p *child (Child) $0 = { (Father) Father = { (NSObject) NSObject = { (Class) isa = Child } (int) _father = 0 } (int) _child = 0 }
因为对象在内存中的排布可以看成一个结构体,该结构体的大小并不能动态变化。所以无法在运行时动态给对象增加成员变量。
注:需要特别说明一下,通过
objc_setAssociatedObject和
objc_getAssociatedObject方法可以变相地给对象增加成员变量,但由于实现机制不一样,所以并不是真正改变了对象的内存结构。
转载地址:https://mp.weixin.qq.com/s?__biz=MjM5NTIyNTUyMQ==&mid=2709545297&idx=1&sn=a391cf9771ed34a211d4d91724bdbaec&chksm=828f0b8fb5f88299f42bde095fb323fe9ed5fa082b19a451535f069b1db550366a35d6c5e8f7&scene=0&key=d2d7b14b9fb66953cc2e4a576331e0038ceee24e71ade1638f89ab2bbdaa219880e81bb67af9d20c76fbc6e30acfac3b95f59227165dc225e89dda4ad51808a52565f06e335ed3dd1d3a47ac76dda69e&ascene=0&uin=MjczNzgxODMyMA%3D%3D&devicetype=iMac+MacBookPro12%2C1+OSX+OSX+10.12+build(16A323)&version=12010010&nettype=WIFI&fontScale=100&pass_ticket=MoVBXavUisk8IhCxo1h%2FswFBwFUPBHQN9m8fqX2Jkj4OYhippEzVbfx74nAk%2FIxF
相关文章推荐
- 黑马程序员_java基础第一部分(二)----数组
- 黑马程序员-[OC]学习之旅-NSString使用和方法
- 黑马程序员—学习笔记—各种排序法
- 为什么优秀的程序员既懒又笨
- 黑马程序员-----Java基础-----IO流-2
- 每天5道面试题(一)
- 黑马程序员—IOS加强视频—利用协议实现代理模式
- 黑马程序员—IOS加强视频—@block
- 2015春天阿里面试问题电话采访和视频摘要
- 程序员读书这件事情
- 【LeetCode-面试算法经典-Java实现】【190-Reverse Bits(反转二制)】
- 【LeetCode-面试算法经典-Java实现】【189-Rotate Array(旋转数组)】
- 【LeetCode-面试算法经典-Java实现】【152-Maximum Product Subarray(子数组的最大乘积)】
- 程序员的年龄天花板
- OSChina 周一乱弹 —— 程序员的浪漫你不懂
- 黑马程序员--IO流2
- 黑马程序员--IO流1
- 黑马程序员--JAVA多线程
- 【黑马程序员】Category(分类)
- 剑指Offer面试题:9.二进制中1的个数