Skip to content

Commit 3f64ae3

Browse files
committed
2 parents a7dedef + b4a20fd commit 3f64ae3

File tree

3 files changed

+28
-2
lines changed

3 files changed

+28
-2
lines changed

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
11
*.xcuserstate
2-
*.DS_Store
2+
*.DS_Store
3+
*.xcbkptlist
4+
01《招聘一个靠谱的iOS》面试题参考答案/Demo_38_block_edit_var/Demo_38_block_edit_var.xcodeproj/project.xcworkspace/xcuserdata/chenyilong.xcuserdatad/UserInterfaceState.xcuserstate
5+
01《招聘一个靠谱的iOS》面试题参考答案/Demo_38_block_edit_var/Demo_38_block_edit_var.xcodeproj/project.xcworkspace/xcuserdata/chenyilong.xcuserdatad/UserInterfaceState.xcuserstate

01《招聘一个靠谱的iOS》面试题参考答案/Demo_38_block_edit_var/Demo_38_block_edit_var/AppDelegate.m

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,29 @@
99
#import "AppDelegate.h"
1010

1111
@interface AppDelegate ()
12+
@property (nonatomic, strong) NSString *nso;
13+
1214

1315
@end
1416

1517
@implementation AppDelegate
1618

19+
int age1 = 20;
1720

1821
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
1922
// Override point for customization after application launch.
23+
int a = 10;
24+
NSLog(@"数据段:age %p", &age1);
25+
NSLog(@"栈: a %p", &a);
26+
NSLog(@"堆:obj %p", [[NSObject alloc] init]);
27+
NSLog(@"class:obj %p", NSClassFromString(@"NSObject"));
28+
NSLog(@"class %p", [NSObject class]);
29+
// for (int i = 0; i < 100000; ++i) {
30+
// dispatch_async(dispatch_get_global_queue(0, 0), ^{
31+
// id o =[NSString stringWithFormat:@"%@%@", @"iTeaTime(技术清谈)", @(i)];
32+
// self.nso = o;
33+
// });
34+
// }
2035
return YES;
2136
}
2237

01《招聘一个靠谱的iOS》面试题参考答案/《招聘一个靠谱的iOS》面试题参考答案(上).md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1192,7 +1192,7 @@ NSObject *foo = [[NSObject alloc] init];
11921192
11931193
11941194
注意:很多人会认为如果属性具备 nonatomic 特质,则不使用
1195-
“同步锁”。其实在属性设置方法中使用的是互斥锁(atomic 的底层实现,老版本是自旋锁,iOS10开始是互斥锁--spinlock底层实现改变了。),互斥锁(atomic 的底层实现,老版本是自旋锁,iOS10开始是互斥锁--spinlock底层实现改变了。)相关代码如下:
1195+
“同步锁”。其实在属性设置方法中使用的是互斥锁(atomic 的底层实现,老版本是自旋锁,iOS10开始是互斥锁--spinlock底层实现改变了。),相关代码如下:
11961196
11971197
11981198
```Objective-C
@@ -1292,6 +1292,11 @@ void objc_setProperty(id self, SEL _cmd, ptrdiff_t offset, id newValue, BOOL ato
12921292
- `readwrite`
12931293
- `strong`
12941294

1295+
1296+
Objective-C 对象默认是 strong,因为你 `class_copyPropertyList` 后再`property_getAttributes` 得到的是`T@"NSString",&,V_name`,其中`&`表示strong(c表示copy等);
1297+
1298+
普通对象是 `assign`,这个获取不到文档说明,但是我们可以从 runtime 源码中找到相关的逻辑,你看看 `objc_AssociationPolicy` 枚举的定义以及内部处理的逻辑就知道了,还有一点就是属性加不加 assign 用 `property_getAttributes` 得到的都是一样的值,可以返推回去结论成立。
1299+
12951300
参考链接:
12961301

12971302
1. [ ***Objective-C ARC: strong vs retain and weak vs assign*** ](http://stackoverflow.com/a/15541801/3395008)
@@ -1711,6 +1716,7 @@ objc在向一个对象发送消息时,runtime库会根据对象的isa指针找
17111716
- 每一个对象内部都有一个isa指针,指向他的类对象,类对象中存放着本对象的
17121717

17131718

1719+
17141720
1. 对象方法列表(对象能够接收的消息列表,保存在它所对应的类对象中)
17151721
2. 成员变量的列表,
17161722
2. 属性列表,
@@ -1736,6 +1742,8 @@ objc在向一个对象发送消息时,runtime库会根据对象的isa指针找
17361742
- 根对象就是NSObject,它的superclass指针指向nil
17371743

17381744
- 类对象既然称为对象,那它也是一个实例。类对象中也有一个isa指针指向它的元类(meta class),即类对象是元类的实例。元类内部存放的是类方法列表,根元类的isa指针指向自己,superclass指针指向NSObject类。
1745+
- 类对象 是放在数据段(数据区)上的, 和全局变量放在一个地方. 这也就是为什么: 同一个类对象的不同实例对象,的isa指针是一样的.
1746+
- 实例对象存放在堆中
17391747

17401748

17411749

0 commit comments

Comments
 (0)