小编Mic*_*ael的帖子

Objective C版本,自动释放和数据类型

我是内存托管代码的新手,但我很清楚这个想法.

在我的应用程序通过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)

我没有泄漏,也没有发布任何东西.谁能解释一下?

iphone xcode release objective-c retain

25
推荐指数
2
解决办法
4万
查看次数

NSCalendar currentCalendar setTimeZone未设置

如果我尝试使用以下内容从应用程序内的任何位置任意设置时区:

[[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]设置时区?这种行为违反直觉.

nstimezone nscalendar ios

3
推荐指数
1
解决办法
6168
查看次数

标签 统计

ios ×1

iphone ×1

nscalendar ×1

nstimezone ×1

objective-c ×1

release ×1

retain ×1

xcode ×1