Here's what I found to be great places to start from within one of Apple's docs.
https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/ProgrammingWithObjectiveC.pdf Essential reading Page 16: Page 43: Page 73: Use Class Extensions to Hide Private Information On Jun 3, 2015, at 12:24 PM, Bernard Desgraupes wrote: > > My question was unclear. I was asking about _where_ they should be declared. > I guess they remain in the @interface. > > > Le 3 juin 2015 à 18:11, Mark+Vron <mark.v...@virgin.net> a écrit : > >>> On 03 Jun 2015, at 16:27, Bernard Desgraupes <bdesgrau...@orange.fr> wrote: >>> >>> >>> What about the @property declarations in the new scheme ? >>> >> >> I’m not sure what you’re asking, @properties are a big part of the 'new >> way'… >> >> This is not about properties though, just about the notion of moving ivars >> out of the class @interface and (if still needed) into the @implementation >> or class extension. There’s a clang warning that can be enabled to help you >> if desired: -Wobjc-interface-ivars >> >> >> >>> >>> Le 3 juin 2015 à 17:15, Mark Wright <blue.bucon...@virgin.net> a écrit : >>> >>>> Sorry, yes, I misread the initial paragraph that mentions the >>>> @implementation block. I actually meant implementation *file* since >>>> that’s typically where the class extension @interface is declared (it >>>> extends the class internally). >>>> >>>> However, as you’ve surmised, all this talk of clang warnings regarding >>>> this is directly related to the primary *class interface* which is >>>> typically declared in the header file. This is the class interface: >>>> >>>> @interface SubClass : ParentClass >>>> …. >>>> @end >>>> >>>> The idea is to end the old ways of declaring ivars in the header and move >>>> them into the implementation where they belong (they’re private to the >>>> class). >>>> >>>> >>>> >>>> >>>>> On 03 Jun 2015, at 16:02, Alex Zavatone <z...@mac.com> wrote: >>>>> >>>>> >>>>> On Jun 3, 2015, at 10:41 AM, David Duncan wrote: >>>>> >>>>>> There are 3 ways to add ivars to a class. The traditional way: >>>>>> >>>>>> @interface Foo { >>>>>> id _bar; >>>>>> } >>>>>> >>>>>> And 2 new ways: >>>>>> >>>>>> @interface Foo() { // Class extension, note the () >>>>>> id _baz; >>>>>> } >>>>> >>>>> Ahhhhhhh. Completely missed that. Haven't seen it explained that >>>>> clearly in a morning of surfing. >>>>> >>>>> So, running a quick test using the clang pragma for >>>>> -Wobjc-interface-ivars, in both the .h and .m files of a class this >>>>> clarifies the Apple and Clang documentation quite a bit. >>>>> >>>>> In the 3 cases you outlined for declaring iVars, Clang ONLY warns about >>>>> declaring the ivars within the @interface parens of @interface which is >>>>> generally within the header file. >>>>> >>>>> Both other cases (the two new ways of class extension, @interface stuff() >>>>> {} and @implementation stuff {} ) do not upset Clang at all. >>>>> >>>>> So, generally, the rule comes down to "don't declare ivars within the >>>>> @interface that is probably within your .h file but if you need to (you >>>>> should use properties instead), you can within the class extension and >>>>> @implementation." >>>>> >>>>> Does this sound like a proper explanation? >>>>> >>>>> Thanks much, David. >>>>> >>>>> >>>>>> @implementation Foo { // Implementation block. >>>>>> id _faz; >>>>>> } >>>>>> >>>>> >>>>> >>>>>>> On Jun 3, 2015, at 7:32 AM, Alex Zavatone <z...@mac.com> wrote: >>>>>>> >>>>>>> Maybe I should have included the text above it. >>>>>>> >>>>>>> "It's also possible to use a class extension to add custom instance >>>>>>> variables. These are declared inside braces in the class extension >>>>>>> interface." >>>>>>> >>>>>>> So, I don't know how you see that it goes in the @implementation block >>>>>>> since the code I pasted and the line above it say it goes in the >>>>>>> @interface. >>>>>>> >>>>>>> Page 73 of >>>>>>> https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/ProgrammingWithObjectiveC.pdf >>>>>>> >>>>>>> On Jun 3, 2015, at 10:22 AM, Mark Wright wrote: >>>>>>> >>>>>>>> That’s a ‘Class Extension’. Furthermore, it’s under the title "Class >>>>>>>> Extensions Extend the Internal Implementation”. It also mentions that >>>>>>>> it goes in the @implementation block… >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>>> On 03 Jun 2015, at 15:11, Alex Zavatone <z...@mac.com> wrote: >>>>>>>>> >>>>>>>>> Apple's Programming with Objective-C reference document © 2014 >>>>>>>>> >>>>>>>>> https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/ProgrammingWithObjectiveC.pdf >>>>>>>>> >>>>>>>>> >>>>>>>>> Page 73 >>>>>>>>> >>>>>>>>> @interface XYZPerson () { >>>>>>>>> id _someCustomInstanceVariable; >>>>>>>>> } >>>>>>>>> ... >>>>>>>>> @end >>>>>>>>> >>>>>>>>> Uhhhhhh. >>>>>>>>> >>>>>>>>> Doesn't this violate Clang's own mention that "declaration of >>>>>>>>> instance variables in the interface is deprecated" in Apple's own >>>>>>>>> recommendations and documentation? >>>>>>>>> _______________________________________________ >>>>>>>>> >>>>>>>>> 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/blue.buconero%40virgin.net >>>>>>>>> >>>>>>>>> This email sent to blue.bucon...@virgin.net >>>>>>>> >>>>>>> >>>>>>> _______________________________________________ >>>>>>> >>>>>>> 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/david.duncan%40apple.com >>>>>>> >>>>>>> This email sent to david.dun...@apple.com >>>>>> >>>>>> -- >>>>>> David Duncan >>>>>> >>>>> >>>> >>>> >>>> _______________________________________________ >>>> >>>> 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/bdesgraupes%40orange.fr >>>> >>>> This email sent to bdesgrau...@orange.fr >>> >>> >>> _______________________________________________ >>> >>> 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/blue.buconero%40virgin.net >>> >>> This email sent to blue.bucon...@virgin.net >> > > > _______________________________________________ > > 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/zav%40mac.com > > This email sent to z...@mac.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