Also, if you're unsure whether you're following ref-counting rules correctly, the static analyzer in Xcode will give very detailed warnings about incorrect uses. Just another way to determine if you're using ref-counting correctly.
Doug Hill > On Aug 24, 2016, at 2:49 PM, Doug Hill <cocoa...@breaqz.com> wrote: > > Wim, > > If I may paraphrase: > > The reference counting semantics are only interesting to the caller when the > callee returns an object. What the callee does with a setter is entirely the > responsibility of the callee to make sure it follows ref-counting rules. For > example, a setter may not involve a property or iVar at all, it could be pure > side-effects. In terms of ref-counting semantics, the caller doesn't have a > clue or need to care what happens > > In this particular case, it would appear that the NSTextField holds a > reference the 'formatter' object via the similarly-named property in > NSControl. While it might be good to know it's a property so we can make use > of property syntax correctly, how it goes about keeping a reference to this > object is unimportant to the caller. > > Doug Hill > > PS > IMHO using manual ref-counting because there is a perceived time-savings from > learning ARC is generally a bad argument. The amount of time trying to figure > out all the manual ref-counting rules, and making sure your code follows them > perfectly, is probably much better spent learning ARC and applying it > correctly. And likely results in more maintainable and understandable code. > The argument in favor of ARC is especially better if you own the code in > question and there isn't much code to write. > > PS #2 > ARC is available in OS X 10.6 as "ARCLite" e.g. "Automatic Reference Counting > without zeroing weak reference." > If you don't require the weak attribute semantics in your own code, then you > should be able to use ARC. > > https://developer.apple.com/library/ios/releasenotes/ObjectiveC/ObjCAvailabilityIndex/ > > >> On Aug 24, 2016, at 1:41 PM, Wim Lewis <w...@omnigroup.com> wrote: >> >> >> On Aug 24, 2016, at 1:04 PM, Andreas Falkenhahn <andr...@falkenhahn.com> >> wrote: >>> I have read Apple's memory management guide on retain/release and >>> I think I've basically got it, but there's just one thing that >>> I'm not confident about and that is "setXXX" methods which accept an >>> NSObject parameter and I don't know how I can know whether the >>> "setXXX" retains or not. >> >> In general, if a method you call wants to keep a reference to an object you >> pass in, it is that method's responsibility to retain it (or copy it, or >> whatever). If it doesn't hold on to the formatter, then it won't retain it. >> The goal of reference-counting, whether ARC or not, is that all that >> information can be safely considered an implementation detail of the method >> you call, and not something you need to worry about. >> >> Delegate and data source setters are an unusual, exceptional case: an object >> with a delegate typically doesn't retain its delegate, just keeps a >> reference to it. This is dangerous, since the delegate can get deallocated, >> leaving a dangling pointer (--> soon you'll crash). If the API conventions >> were being formed today, delegates would probably be 'weak' pointers, but >> since they predate the existence of weak pointers they get the "slightly >> dodgy poor-man's weak pointer" behavior of simply not retaining. Why is >> this? It's to avoid retain-cycles, since very often, an object's delegate is >> its (direct or indirect) owner in a conceptual sense and therefore already >> retains the object. >> >> >>> Post-scriptum: Yes, I know, there's now ARC and everything and >>> all those retain stuff shouldn't be used anymore >> >> ARC just automatically inserts the same retain/release calls that you would >> have written manually. (Plus some optimizations on top of that, but that's >> the basic idea.) It can be useful to understand MRR even if you don't write >> it. >> >> On Aug 24, 2016, at 1:24 PM, Andreas Falkenhahn <andr...@falkenhahn.com> >> wrote: >>> If it retains, I could just do the following: >>> >>> [textField setFormatter:formatter]; >>> [formatter release]; >>> >>> And I wouldn't have to worry about "formatter" any longer. >> >> Yes, you can do exactly that. If the textField needs the formatter to >> continue to exist after -setFormatter: returns, it will retain it. It's the >> textField's job to worry about that retain/release, not yours. You only need >> to retain objects that *you* have a reason to reference in the future. > > > _______________________________________________ > > 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/cocoadev%40breaqz.com > > This email sent to cocoa...@breaqz.com _______________________________________________ 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