我是内存托管代码的新手,但我很清楚这个想法.
在我的应用程序通过XCode中的泄漏工具,我注意到我只需要清理我的自定义对象,但不是动态创建的数组,所以我认为这些数据类型是自动释放的 - 这是有意义的,因为我只需要释放数组我用作具有(保留)它们的属性.
然后我注意到一些奇怪的事情:我在某个初始化的数组上得到了泄漏:
NSMutableArray *removals = [NSMutableArray new];
Run Code Online (Sandbox Code Playgroud)
但不是类似的
NSMutableArray *removals = [NSMutableArray arrayWithCapacity:9];
Run Code Online (Sandbox Code Playgroud)
现在,一个用"new"设置的原因是它可能有0-99个项目,而另一个我知道它总是9个.因为两个数组后来都根据用户传递给同一个方法互动,如果我没有在方法结束时发布,或者如果我做了,则要么是泄漏!
我将第一个数组更改为
NSMutableArray *removals = [NSMutableArray arrayWithCapacity:99];
Run Code Online (Sandbox Code Playgroud)
我没有泄漏,也没有发布任何东西.谁能解释一下?
如果我尝试使用以下内容从应用程序内的任何位置任意设置时区:
[[NSCalendar currentCalendar] setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"EST"]];
NSTimeZone *tz = [[NSCalendar currentCalendar] timeZone];
NSLog(@"%@", tz);
Run Code Online (Sandbox Code Playgroud)
日志语句的结果是:
America/Los_Angeles(PDT)偏移-25200(日光)
(这是我当地的时区,即[NSTimeZone systemTimeZone])
但是,NSCalendar上类别中功能相似的代码可以正常工作:
[self setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"EST"]];
NSTimeZone *tz = [self timeZone];
NSLog(@"%@", tz);
Run Code Online (Sandbox Code Playgroud)
和日志产量:
America/New_York(EDT)抵消-14400(日光)
如何为[NSCalendar currentCalendar]设置时区?这种行为违反直觉.