Sandor is correct. Using "new" in a method name is not forbidden. That method 
just has to return an object with a +1 retain count. The relevant docs are here:

https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html#//apple_ref/doc/uid/20000994-BAJHFBGH
 
<https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html#//apple_ref/doc/uid/20000994-BAJHFBGH>

The static analyzer in Xcode will detect any methods that fail to follow these 
rules– at least, most of the time.

The "newData" selector name used for Carl's timer callback won't cause any 
problems. That method doesn't return an object, so calling code can't leak or 
overrelease any objects because the memory management conventions were 
disregarded. The static analyzer ignores this method because there's no return 
value to misuse.

Even if the timer's callback selector were expected to return an object with a 
neutral retain count (eg: an autoreleased object), the timer implementation 
wouldn't figure out that you'd incorrectly given it a selector whose name 
includes "new". There's no runtime introspection that would change the behavior 
of the timer; the naming conventions ensure properly balanced retains/releases 
during compilation. At runtime the timer would happily call your method and 
simply fail to release the return value. If you wrote your "new" method 
properly to return a +1 retain count object you'd have a leak, not a crash or 
change in timer behavior. If you wrote your "new" method incorrectly and 
returned an autoreleased object there would be no leaks or runtime 
implications, at least not from the timer's side of things.

All that said, the "newData" method name is best changed so as not to confuse 
anyone who does know the correct naming conventions.

~Martin Wierschin


> On Apr 29, 2020, at 3:55 PM, Alex Zavatone via Cocoa-dev 
> <cocoa-dev@lists.apple.com> wrote:
> 
> Sandor, it’s somewhere in the naming guide for the Objectice-C fundamental 
> docs.  I could be confusing things though.
> 
>> On Apr 29, 2020, at 5:27 PM, Sandor Szatmari <admin.szatmari....@gmail.com> 
>> wrote:
>> 
>> Alex,
>> 
>>> On Apr 29, 2020, at 17:12, Alex Zavatone via Cocoa-dev 
>>> <cocoa-dev@lists.apple.com> wrote:
>>> 
>>> Not sure about this, but in Objective-C, you’re not supposed to start 
>>> methods with new.
>> 
>> I’ve always operated under the premise that using a reserved prefix, such as 
>> new, was not verboten.  Rather, if one chose the prefix new one must ensure 
>> that the method followed memory management conventions, and would return an 
>> object with a +1 retain count.  Am I mistaken about this?
>> 
>> Sandor
>> 
>>> 
>>>>> On Apr 29, 2020, at 4:07 PM, Carl Hoefs via Cocoa-dev 
>>>>> <cocoa-dev@lists.apple.com> wrote:
>>>>>>> NSTimer *newTimer = [NSTimer timerWithTimeInterval:1.0  // should be 
>>>>>>> 1/sec



_______________________________________________

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