Dear Jeff and all,

I appreciate so much for your help! After reading the document from
apple.com, I changed my code as follows. It must be fine.

Best regards,
Bing

+ (const char *) CreateSignInMessage: (NSString *)peerKey PN: (NSString
*)peerName PW:(NSString *)password
{
        NSXMLElement *root = [NSXMLNode
elementWithName:MessageConstants.XML.MESSAGE_ROOT];
        NSXMLDocument *xmlDoc = [[NSXMLDocument alloc]
initWithRootElement:root];
        [xmlDoc setVersion:MessageConstants.XML.XML_VERSION];
        [xmlDoc setCharacterEncoding:MessageConstants.XML.XML_ENCODING];

        NSXMLElement *peerKeyElement = [NSXMLNode
elementWithName:MessageConstants.XML.PEERKEY];
        [root addChild:peerKeyElement];
        [peerKeyElement addChild:[NSXMLNode textWithStringValue:peerKey]];

        NSXMLElement *peerNameElement = [NSXMLNode
elementWithName:MessageConstants.XML.PEERNAME];
        [root addChild:peerNameElement];
        [peerNameElement addChild:[NSXMLNode textWithStringValue:peerName]];

        NSXMLElement *passwordElement = [NSXMLNode
elementWithName:MessageConstants.XML.PASSWORD];
        [root addChild:passwordElement];
        [passwordElement addChild:[NSXMLNode textWithStringValue:password]];

        NSData *data = [xmlDoc XMLDataWithOptions:NSXMLNodePrettyPrint];
        NSString *xmlStr = [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
        const char *xmlChar = [xmlStr UTF8String];

        /*
        [passwordElement release];
        [root release];
        [xmlStr release];
        [data release];
         */
        [xmlDoc release];
        [xmlStr autorelease];
        return xmlChar;
}


On Thu, May 19, 2011 at 4:23 PM, Jeffrey Walton <noloa...@gmail.com> wrote:

> On Wed, May 18, 2011 at 2:16 PM, Ken Thomases <k...@codeweavers.com> wrote:
> > On May 18, 2011, at 12:55 PM, Bing Li wrote:
> >
> >>        NSXMLElement *root = [NSXMLNode elementWithName:"MessageRoot"];
> >
> > As per Cocoa's memory management conventions, you don't not own the
> object returned by -[NSXMLNode elementWithName:].  You have not invoked a
> method whose name contains "alloc", "new", or "copy" or which is explicitly
> documented as giving its caller ownership rights and responsibilities.
> >
> >>        NSXMLElement *peerKeyElement = [NSXMLNode
> elementWithName:"PeerKey"];
> >
> > Same here.
> >
> >>        NSXMLElement *peerNameElement = [NSXMLNode
> elementWithName:"PeerName"];
> >
> > Same here.
> >
> >>        NSXMLElement *passwordElement = [NSXMLNode
> elementWithName:"Password"];
> >
> > Same here.
> >
> >>        NSData *data = [xmlDoc XMLDataWithOptions:NSXMLNodePrettyPrint];
> >
> > Same here.
> >
> >>        [passwordElement release];
> >> //        [peerNameElement release];
> >> //        [peerKeyElement release];
> >>        [root release];
> >>        [xmlDoc release];
> >>        [xmlStr release];
> >>        [data release];
> >
> > Many of these releases are wrong, not just the ones you have commented
> out.
> > Of these, you only own xmlDoc and xmlStr, so those are the only ones you
> are
> > entitled to release.  If you didn't happen to get exceptions from
> releasing the
> > others, it was an unhappy accident.  (Unhappy because it hid your bug.
>  It is
> > always better for bugs to be found early.)
> If it helps Bing (and coming from someone who frequently needs the
> same sort of help): (1) Run you code using Instruments, or (2) select
> Executable -> Arguments and add NSZombieEnabled = YES. Both should
> help you flush out the problems early (as Ken suggests).
>
> > Please review the Memory Management Programming Guide <
> http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/>.
>  It explains all of this.
> >
> Also grab a book or two. It will help you digest it. Nuremberg's book
> would be a good choice since the doctor stays active on this list.
>
> Jeff
>
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to