On 2013-09-12 17:00, Bill Cheeseman wrote:
-eventTypes: is, in fact, a classic "new" method, though a bit oddly
written. All in the one method (by calls to utility methods), it
creates a new object with a refcount of 1 by calling +alloc
indirectly, increases its refcount by 1 more by calling
-setEventTypes:, decreases its refcount by 1 to balance the second
increase, and returns it with a refcount of 1 without autoreleasing
it. It does own the new object, and the method should have "new" in
its name.

I agree with Graham that the method must not be named new...
(because the caller is not to release the returned value).

I think there might be two reasons for the warning:

a) (I guess that not the reason): The analyser gets confused by
   seeing -setEventTypes:.

@Graham: What happens when you comment out the call to setEventTypes:?

      NSDictionary* eventTypes = [self newEventTypes];
      // [self setEventTypes:eventTypes];
      [eventTypes release];

Do you still get the warning?


b) The "if (mEventTypes == nil) {} return mEventTypes;" confuses the analyser:

   if (mEventTypes == nil)       // OK, mEventTypes might be nil here.
   {
[self loadNib]; // Might do anything, but due to the name: +/-0

NSDictionary* eventTypes = [self newEventTypes]; // +1 for eventTypes
      [self setEventTypes:eventTypes];// Might do anything,
// but due to the name: +/-0 for everything.
      [eventTypes release];           // -1 for eventTypes, fine.
   }

   return mEventTypes;
   // Wait. Why is the coder returning mEventTypes instead of nil?
// Nobody created an object, but the coder assumes that there is an object // in mEventTypes now. Where did it come from? It must not be autoreleased // because this would result in a dangling pointer, so it MUST be +1 (or more).
   // Might be a leak. Lets warn the coder.

Reasonable?

@Graham: Could you try the following:

- (BOOL)isEventTypesAvailable
{
   return mEventTypes != nil;
}

...
   if (![self isEventTypesAvailable])
   {
...

Bye,
   Daniel

@Bill: Sorry for sending this mail to you directly instead of to the list before. %-)
_______________________________________________

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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

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

Reply via email to