该手册页告诉我这么多,通过它我知道很多"的glibc"的内存管理的背景知识.
但我仍然感到困惑." malloc_trim(0) "(注意零作为参数)是什么意思(1.)"堆"部分中的所有内存都将返回给操作系统?或者(2.)只是堆的最顶层区域的所有"未使用"内存都将返回给操作系统?
如果答案是(1.),如果堆中仍然使用的内存怎么办?如果堆在某处使用了momery,它们会被删除,还是函数不能成功执行?
如果答案是(2.),那么那些地方而不是堆顶部的那些" 漏洞 "呢?它们已经是未使用的内存了,但仍然使用了堆的最顶层区域,这个调用会有效吗?
谢谢.
我正在关注官方教程你的第二个iOS应用程序:Storyboard,它告诉我像这样声明一个属性masterBirdSightingList(只是一个特定的例子,不需要知道上下文):
@property (nonatomic, copy) NSMutableArray *masterBirdSightingList;
Run Code Online (Sandbox Code Playgroud)
请注意,有一个属性副本.然后合成这个属性:
@synthesize masterBirdSightingList = _masterBirdSightingList;
Run Code Online (Sandbox Code Playgroud)
接下来有一个让我困惑的init方法:
- (void)initializeDefaultDataList {
NSMutableArray *sightingList = [[NSMutableArray alloc] init];
self.masterBirdSightingList = sightingList;
[self addBirdSightingWithName:@"Pigeon" location:@"Everywhere"];
}
Run Code Online (Sandbox Code Playgroud)
绝对是为空格分配了sightingList,然后将它分配给masterBirdSightingList属性.但是,该属性具有复制属性.这意味着实例变量_masterBirdSightingList将为另一个空间,从保存的东西被分配sightingList.为什么?为什么不直接为属性分配空间,如下所示:
self.masterBirdSightingList = [[NSMutableArray alloc] init];
Run Code Online (Sandbox Code Playgroud)