我是内存托管代码的新手,但我很清楚这个想法.
在我的应用程序通过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)
我没有泄漏,也没有发布任何东西.谁能解释一下?
我有这个非常奇怪的问题,我是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)它也有效
有任何想法吗?谢谢