相关疑难解决方法(0)

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万
查看次数

NSString意外地变成__NSCFDictionary

我有这个非常奇怪的问题,我是Objective-c的新手,它可能来自我还不理解的深度.

所以,在我的头文件中,我声明了变量

NSString *curTitle;
Run Code Online (Sandbox Code Playgroud)

然后在.m文件中我合成它:

curTitle = [[NSString alloc] init];
Run Code Online (Sandbox Code Playgroud)

在其他方法之后我分配它:

curTitle = string; // string is an instance of NSString
Run Code Online (Sandbox Code Playgroud)

在我试图分配的那天结束时

slide.title = curTitle; //slide is a managed object (CoreData)
Run Code Online (Sandbox Code Playgroud)

我收到此错误:***由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:'属性的值不可接受的类型:property ="title"; 期望的类型= NSString; 给定type = __NSCFDictionary; value = {}.'

有趣的事实,在iphone SDK 3.2中它工作,但在我安装SDK 4后,我有这个错误

另一个有趣的事实是,如果我的类的curTitle属性(使用@property和@synthesize)它也有效

有任何想法吗?谢谢

iphone core-data objective-c nsstring

0
推荐指数
1
解决办法
2235
查看次数

标签 统计

iphone ×2

objective-c ×2

core-data ×1

nsstring ×1

release ×1

retain ×1

xcode ×1