On Feb 25, 2009, at 12:03 PM, Richard Good wrote:
Thanks for looking at the code. I tried to simplify things for the example so I removed as much as possible (maybe too much) that I thought was not directly relevant. However making all of your suggested changes and maybe an extra retain or two, still yields an "Out of scope" problem in the debugger. In fact at NO time during the initialization does the debugger show the super types NSDate's instance variable in scope.

Hm, come to think of it, although your code did have a bad memory bug (which could have led to a crash later on), in my test I think aDate was still pending autorelease so that didn't explain the "out of scope". Also, I was assuming you're not using garbage collection, which may not be true. I'm afraid I don't know what the actual explanation is.

BTW, if you're not using GC, don't forget to implement -dealloc to release the ivars you've retained, or you'll have a memory leak.

--Andy


-(DateTest*)    init    {
        if (self=[super init])  {
                aDate =[[NSDate date]retain];
                return self;
        }
        return nil;
}
-(DatesubClass*)        init    {
        if (self =[super init]) {
                
                testStr= @"Test";
                return self;
        }
        return nil;

}
@end

DatesubClass* theDate = [[[DatesubClass alloc]init]retain];


DatesubClass* datesubClass = [[DatesubClass alloc]init];
would allocate the
On Feb 24, 2009, at 7:01 PM, Andy Lee wrote:

On Feb 24, 2009, at 8:25 PM, Richard Good wrote:
-(DateTest*)    init    {
        [super init];
        aDate =[NSDate date];
        return self;
}

Wait a minute. I just figured out you're saying the *debugger* says datesubClass.aDate is out of scope, not the compiler as I thought. The reason is that you're not retaining aDate in the init method. It gets deallocated prematurely and the pointer is invalid, hence "out of scope". Try

        aDate = [[NSDate date] retain];

If it's unclear why you need to do this, you need to study memory management -- it's a prominent chapter in the docs, you should be able to find it, plus it's linked to many, many times in the list archives.

There are other coding issues: init methods should return id, and they should check the result of [super init]. There's a chapter on "writing initializers" or some such -- look for that too.

--Andy




aglee



_______________________________________________

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