【发布时间】:2016-06-06 12:54:14
【问题描述】:
我们说
NSNumber *number =[[NSNumber alloc] numberWithInetger]
上面的编辑应该是:
NSNumber *number =[[NSNumber alloc] initWithInteger:0]
这是为变量分配内存
但这不是:
NSNumber *number = [NSNumber numberWithInteger:1]
现在就我而言,我想调查这条线背后发生了什么:
_storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
- 通过在循环中重复 (
storyboardWithName) 方法,我每次分配不同的内存?如果我的故事板很大,这是不好的做法吗? - 如果我在一个方法块中使用此方法 (
storyboardWithName),最好只在该方法中定义它吗?完成方法块后会自动释放吗?如果定义为类成员变量呢? - 如果我分配此对象,它何时会被内存管理解除分配 (
@autoreleasepool)?*
在我的情况下这基本上意味着什么:
对于这个方法来说:
- storyboardWithName:bundle:
为指定的故事板创建并返回一个故事板对象 资源文件。
.....
返回值 指定文件的情节提要对象。如果不 故事板资源文件匹配名称存在,抛出异常 带有描述:找不到名为“XXXXXX”的情节提要 捆绑....
讨论 使用此方法检索情节提要对象 包含您要访问的视图控制器图。全部 与故事板关联的资源必须在捆绑包中 由 storyboardBundleOrNil 参数指示。
正在保留对象,但由于我们没有分配/复制,所以不会有 需要释放变量。
更新
这是我从这张幻灯片中了解到的,我有点困惑!
幻灯片链接:http://www.slideshare.net/whalec1/ios-memory-management-basis
【问题讨论】:
-
NSNumber *number 已分配内存。
-
有几件事:1) 你的第一行代码不应该编译,因为
alloc创建了一个实例,但numberWithInteger是一个类方法。 2)[NSNumber numberWithInteger:1]文档说它创建了一个对象,它建议分配内存。 (有可能正在进行共享或缓存,但从调用者的角度来看,它需要被视为正在分配内存。) -
@PhillipMills 请查看编辑后的代码行
-
这个更新的代码:
NSNumber *number =[[NSNumber alloc] initWithInteger]仍然是错误的。它应该是NSNumber *number =[[NSNumber alloc] initWithInteger: 1]。您必须添加一个冒号并提供一个整数
标签: ios memory memory-management uistoryboard allocation