`

iOS NSString 内存泄漏 , 求解决

阅读更多

递归, autorelease对象如何避免内存泄漏????

-(NSString *) getStuJsonString : (StuNode *) stuNode{

    NSString *nodeJsonString = [[NSString alloc] initWithString:@""];

    {

        nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingString: @"{"]] autorelease];

        nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"visible\":\"%@\",", [self FormatNillOrNilOrnull:stuNode.Visible]]] autorelease];

        

        //othters

        nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"title\":\"%@\",", [self FormatNillOrNilOrnull:stuNode.title]]] autorelease];               

        nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"courseName\":\"%@\",", [self FormatNillOrNilOrnull:stuNode.courseName]]] autorelease];                       

        nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"href\":\"%@\",", [self FormatNillOrNilOrnull:stuNode.href]]] autorelease];                       

        nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"sid\":\"%@\",", [self FormatNillOrNilOrnull:stuNode.sid]]] autorelease];                       

        nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"rid\":\"%@\",", [self FormatNillOrNilOrnull:stuNode.rid]]] autorelease];                       

        nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"courseID\":\"%@\",", [self FormatNillOrNilOrnull:stuNode.courseID]]] autorelease];                       

        nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"studentID\":\"%@\",", [self FormatNillOrNilOrnull:stuNode.studentID]]] autorelease];        

        

        //rtdata

        if(stuNode.RTData == nil || stuNode.RTData == (id)[NSNull null]){

            nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString  stringByAppendingString:@"\"RTData\":null,"]] autorelease];                                   

        } else {

            nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString  stringByAppendingString:@"\"RTData\":{"]] autorelease];                                   

            //core

            NSMutableArray *arr_core = stuNode.RTData.core;

            nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingString:@"\"core\":["]] autorelease];                                   

            for(RTDataNodeCoreItem* coreItem in arr_core) {

                nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingString:@"{"]] autorelease];                                               

                if([coreItem.Itemid compare:@"score"] != NSOrderedSame) {

                    nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"value\":\"%@\",", [self FormatNillOrNilOrnull:coreItem.value]]] autorelease];                                                           

                } else {

                    nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingString:@"\"value\":["]] autorelease];                                                           

                    for(RTDataNodeCoreItem *score_core_item in coreItem.scoreValue){

                        nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingString:@"{"]] autorelease];                                                                       

                        nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"value\":\"%@\",", [self FormatNillOrNilOrnull:score_core_item.value]]] autorelease];                                                                       

                        nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"id\":\"%@\",", [self FormatNillOrNilOrnull:score_core_item.Itemid]]] autorelease];                                                                       

                        nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"type\":\"%@\",", [self FormatNillOrNilOrnull:score_core_item.type]]] autorelease];                                                                       

                        nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"toJSONString\":\"%@\",", [self FormatNillOrNilOrnull:score_core_item.toJSONString]]] autorelease];                                                                       

                        nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"parseJSON\":\"%@\",", [self FormatNillOrNilOrnull:score_core_item.parseJSON]]] autorelease];                                                                       

                        nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"io\":\"%@\"", [self FormatNillOrNilOrnull:score_core_item.io]]] autorelease];                                                                       

                        if(score_core_item == [coreItem.scoreValue lastObject]){

                            nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingString:@"}"]] autorelease];                                                                                   

                        } else {

                            nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingString:@"},"]] autorelease];                                                                                   

                        }

                    }                    

                    nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingString:@"],"]] autorelease];                                                           

                }

                

                nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"id\":\"%@\",", [self FormatNillOrNilOrnull:coreItem.Itemid]]] autorelease];                                               

                nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"type\":\"%@\",", [self FormatNillOrNilOrnull:coreItem.type]]] autorelease];                                               

                nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"toJSONString\":\"%@\",", [self FormatNillOrNilOrnull:coreItem.toJSONString]]] autorelease];

                nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"parseJSON\":\"%@\",", [self FormatNillOrNilOrnull:coreItem.parseJSON]]] autorelease];

                nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"io\":\"%@\"", [self FormatNillOrNilOrnull:coreItem.io]]] autorelease];

                

                if(coreItem == [arr_core lastObject]){

                    nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingString:@"}"]] autorelease];    

                } else {

                    nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingString:@"},"]] autorelease];        

                }

            }

            nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingString:@"],"]] autorelease];

            

            //comments

            nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"comments\":\"%@\",", [self FormatNillOrNilOrnull:stuNode.RTData.comments]]] autorelease];

            nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"launchData\":\"%@\",", [self FormatNillOrNilOrnull:stuNode.RTData.launchData]]] autorelease];

            nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"suspendData\":\"%@\",", [self FormatNillOrNilOrnull:stuNode.RTData.suspendData]]] autorelease];

            nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"scoID\":\"%@\",", [self FormatNillOrNilOrnull:stuNode.RTData.scoID]]] autorelease];

            nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"scoType\":\"%@\",", [self FormatNillOrNilOrnull:stuNode.RTData.scoType]]] autorelease];

            nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"toJSONString\":\"%@\",", [self FormatNillOrNilOrnull:stuNode.RTData.toJSONString]]] autorelease];

            nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"parseJSON\":\"%@\",", [self FormatNillOrNilOrnull:stuNode.RTData.parseJSON]]] autorelease];

            

            //cmiParL1

            NSMutableArray *arr_cmiParL1 = stuNode.RTData.cmiParL1;

            nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingString:@"\"cmiParL1\":["]] autorelease];

            

            for(NSString *obj_cmiParL1 in arr_cmiParL1) {

                if(obj_cmiParL1 == [arr_cmiParL1 lastObject]){

                    nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"%@\"", obj_cmiParL1]] autorelease]; 

                }else {

                    nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"%@\",", obj_cmiParL1]] autorelease];        

                }

            }

            nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingString:@"],"]] autorelease];

            

            //cmiParL2

            NSMutableArray *arr_cmiParL2 = stuNode.RTData.cmiParL2;

            nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingString:@"\"cmiParL2\":["]] autorelease];

            

            for(NSString *obj_cmiParL2 in arr_cmiParL2) {

                if(obj_cmiParL2 == [arr_cmiParL2 lastObject]){

                    nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"%@\"", obj_cmiParL2]] autorelease];

                }else {

                    nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"%@\",", obj_cmiParL2]] autorelease];   

                }

            }

            nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingString:@"],"]] autorelease];

            

            //launch_data

            nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"launch_data\":\"%@\",", [self FormatNillOrNilOrnull:stuNode.RTData.launch_data]]] autorelease];

            

            //student_data

            NSMutableArray *arr_student_data = stuNode.RTData.student_data;

            nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingString:@"\"student_data\":["]] autorelease];

            

            for(RTDataNodeCoreItem* coreItem in arr_student_data) {

                nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingString:@"{"]] autorelease];

                nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"value\":\"%@\",", [self FormatNillOrNilOrnull:coreItem.value]]] autorelease];

                nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"id\":\"%@\",", [self FormatNillOrNilOrnull:coreItem.Itemid]]] autorelease];

                nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"type\":\"%@\",", [self FormatNillOrNilOrnull:coreItem.type]]] autorelease];

                nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"toJSONString\":\"%@\",", [self FormatNillOrNilOrnull:coreItem.toJSONString]]] autorelease];

                nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"parseJSON\":\"%@\",", [self FormatNillOrNilOrnull:coreItem.parseJSON]]] autorelease];

                nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"io\":\"%@\"", [self FormatNillOrNilOrnull:coreItem.io]]] autorelease];

                nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingString:@"}"]] autorelease];

                

            }

            nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingString:@"],"]] autorelease];

            

            //suspend_data

            nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"suspend_data\":\"%@\"", [self FormatNillOrNilOrnull:stuNode.RTData.suspend_data]]] autorelease];

            nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingString:@"},"]] autorelease];

        }

        

        nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"scoType\":\"%@\",", [self FormatNillOrNilOrnull:stuNode.scoType]]] autorelease]; 

        nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"toJSONString\":\"%@\",", [self FormatNillOrNilOrnull:stuNode.toJSONString]]] autorelease];

        

        //items

       NSLog(@"item:%@", stuNode.title);

        nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingString:@"\"items\":["]] autorelease];

        if(stuNode.items != nil) {

            NSMutableArray *itemArray = stuNode.items;

            for(StuNode *item in itemArray){

                if(item == [itemArray lastObject]){

                    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

                    nodeJsonString =[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"%@", [self getStuJsonString:item]]] ;

                    [pool drain];

                }else {

                    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

                    nodeJsonString = [[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"%@", [self getStuJsonString:item]]];

                    [pool drain];

                    

                    nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingString:@","]] autorelease];

                }

            }

        }

        nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingString:@"],"]] autorelease];

        nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingFormat:@"\"parseJSON\":\"%@\"", [self FormatNillOrNilOrnull:stuNode.parseJSON]]] autorelease];

        nodeJsonString = [[[NSString alloc] initWithString:[nodeJsonString stringByAppendingString:@"}"]] autorelease];  

    }

    return [nodeJsonString autorelease]; ;

}


更多详细信息请查看java教程网 http://www.itchm.com/forum-59-1.html
分享到:
评论

相关推荐

    IOS 常见内存泄漏以及解决方案

    IOS 常见内存泄漏以及解决方案 整理了几个内存泄漏的例子,由于转载地址已经找不到了,在这里就不一一列出来了。 1 OC和CF转化出现的内存警告 CFStringRef cfString = CFURLCreateStringByAddingPercentEscapes...

    ios内存管理之深浅拷贝

    这有助于我们在实际项目中正确地管理内存,避免出现内存泄漏或意外的副作用。 总之,理解深浅拷贝、`retain`和`retainCount`对于iOS开发来说是至关重要的。通过实践和测试,我们可以更好地掌握这些概念,编写出高效...

    10天掌握IOS 内存管理

    ### IOS 内存管理核心知识点解析 #### 一、对象所有权机制 在Objective-C中,对象的生命周期由其引用计数决定,这是内存管理的核心。对象的“拥有”概念至关重要,意味着一个对象至少需要有一个拥有者才能保持其...

    iOS内存管理方面的面试题汇总

    循环引用是导致内存泄漏的主要原因之一,通常需要通过以下方式解决: 1. 使用`weak`或`unsafe_unretained`引用代替`strong`引用,以打破循环引用。在ARC下,推荐使用`weak`,因为当对象释放时,`weak`引用会自动设为...

    详解iOS应用开发中的ARC内存管理方式

    **iOS应用开发中的ARC内存管理方式详解** **一、ARC的引入与启用** ARC(Automatic Reference Counting),自iOS 5起成为Objective-C的一个重要特性,它极大地简化了内存管理,由编译器自动处理对象的引用计数,...

    25个增强iOS应用程序性能的提示和技巧

    **ARC(Automatic Reference Counting)**是一种自动内存管理机制,它首次出现在iOS 5中,旨在帮助开发者解决内存管理的问题。在ARC出现之前,开发者需要手动进行retain和release操作来管理内存,这很容易导致内存...

    iOS 5 arc 指南

    - **ARC的优势**:ARC的主要优势在于减少了内存管理的负担,降低了内存泄漏的风险,并提高了代码的可读性和维护性。由于编译器负责内存管理,开发者可以更加专注于应用程序的逻辑实现。 #### 指针与对象的生命 - *...

    ios学习资料打包

    - **内存管理**:理解ARC(Automatic Reference Counting)机制,防止内存泄漏。 - **Foundation框架**:学习NSArray、NSDictionary、NSString等基本数据结构的使用。 2. **一步一步学习iOS5编程第二版.pdf**: ...

    25条iOS代码编写技巧与建议

    - **局限性**:虽然ARC可以极大减少内存泄漏的风险,但它并不能解决所有内存管理问题,例如block引起的循环引用、Core Foundation对象的不当管理等问题。 #### 2. 合理使用reuseIdentifier - **背景介绍**:在...

    iphone 开发比用的NSString转化技巧

    在iOS开发中,NSString是Objective-C中用于处理文本数据的核心类,它经常需要与各种其他类型的数据进行转换,如NSArray、NSDate、int和C字符串(CString)。以下是一些关于NSString转换的重要技巧和方法: 1. **...

    iOS面试题总结

    ARC的引入极大地简化了内存管理过程,降低了内存泄漏的风险。 2. 多线程编程 iOS中的多线程编程通常通过Grand Central Dispatch(GCD)或者NSOperation来实现。多线程是优化应用性能、提高用户体验的关键技术。...

    iOS开发 GTMBase64文件

    3. **内存管理**:GTMBase64库考虑到了内存管理问题,它会自动处理内存分配和释放,避免内存泄漏。这使得开发者在使用过程中更加省心,不必过多关注内存管理细节。 4. **线程安全**:GTMBase64库设计时考虑到了多...

    iOS开发规范.pdf

    内存管理规范主要涉及对对象的内存分配和释放进行规范,比如使用注释方式来记录延迟调用的范围,或者对类型设计进行限制,以避免内存泄漏。 代码组织规范则涉及到项目的代码架构,比如建议将ViewController的代码...

    iOS笔试题011

    本文将详细解释 iOS 笔试题011 中的知识点,涵盖#import、@class、属性、setter 方法、内存管理等方面。 一、#import、@class 的区别 #import 和 @class 都可以用来包含某个文件的内容,但是它们之间有一些关键的...

    iOS开发 常见的崩溃闪退原因(12点)1

    - **C语言框架**:调用底层C语言框架时,确保正确释放变量以避免内存泄露。 4. **遍历数组时修改数组**:在遍历`NSMutableArray`时对其进行修改,如添加、删除元素,会导致崩溃。例如: ```swift NSMutableArray...

    iOS笔试题(带答案)

    - **问题分析**:上述代码中创建的多个 `NSString` 对象都没有显式释放,这会导致内存泄漏。 - **解决方法**:使用 `NSAutoreleasePool` 来管理临时对象的生命周期,确保每个循环内部创建的对象能够及时释放。 ``...

    YUKit for IOS

    该框架的核心特点是采用自动引用计数(Automatic Reference Counting,简称ARC),这是一种内存管理技术,可以自动处理Objective-C对象的生命周期,避免了手动管理内存的繁琐和可能导致的内存泄漏问题。 在iOS开发...

    libxml in iOS(Xcode)

    - 另外,可以使用`xmlFree`函数及时释放不再使用的XML对象,避免内存泄漏。 7. **错误处理** - libxml提供了丰富的错误处理机制,通过`xmlGetLastError`获取错误信息,以便调试和报告问题。 8. **安全考虑** - ...

    iOS2018面试题

    通常使用`weak`关键字,以防止内存泄漏和循环引用的发生。 8. **`nonatomic`与`atomic`的区别:** - `nonatomic`表示非原子性操作,即不会保证线程安全,性能更高。 - `atomic`则保证了线程安全,但在多线程环境...

Global site tag (gtag.js) - Google Analytics