• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: passing a method name?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: passing a method name?


  • Subject: Re: passing a method name?
  • From: Jeffrey Oleander <email@hidden>
  • Date: Sun, 20 Dec 2009 10:05:11 -0800 (PST)

> On Sun, 2009/12/20, Graham Cox <email@hidden> wrote:
> From: Graham Cox <email@hidden>
> Subject: Re: passing a method name?
> To: "Chunk 1978" <email@hidden>
> Cc: "cocoa-dev Dev" <email@hidden>
> Date: Sunday, 2009 December 20, 07:29
>> On 2009/12/21, at 00:18, Chunk 1978 wrote:
>> i have a bunch of methods that will call one
>> method.  currently, i'm passing a string object
>> so the called method will know which method
>> had called it, and complete the proper task
>> based on the method that called it.

> Good programming practice encourages the idea that
> functions and methods are complete in and of themselves, and
> are invariant under different calling conditions. Variations
> should be accomplished using properly passed parameters, not
> information about where the function has been called from.
> I'd say this approach is going to bite you very, very hard
> if you persist with it. Nobody does this in professional
> programming, and where it is done inadvertently, it will
> usually be rejected and revised when code is peer-reviewed.
> So you might consider this comment part of a peer review.
>
> The only situation this is considered acceptable is when
> passing a callback or completion method, where the called
> method calls the passed method but no part of its internal
> state depends on it.
>
> > instead of creating strings and passing them, is it
> possible to pass
> > the method name?
>
> You can pass a SEL (selector) type but unless it's for the
> specific purpose of indicating a callback or completion
> method, I would strongly advise against it.

OTOH

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ActionMessages/Concepts/TargetsAndActions.html

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/SearchFields/Articles/ConfiguringTargetAction.html

- (IBAction)updateFilter:sender

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CommunicatingWithObjects/CommunicateWithObjects.html

- (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename; // NSApplication
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender; // NSApplication

An action is the message a control sends to the target or, from the perspective of the target, the method it implements to respond to the action. A control or— as is frequently the case in the Application Kit—a control’s cell stores an action as an instance variable of type SEL. SEL is an Objective-C data type used to specify the signature of a message. An action message must have a simple, distinct signature. The method it invokes returns nothing and has a sole argument of type id. This argument, by convention, is named sender. Here is an example from the NSResponder class, which defines a number of action methods:

- (void)capitalizeWord:(id)sender;
Action methods declared by Cocoa classes can also have the equivalent signature:

- (IBAction) deleteRecord:(id)sender;
In this case, IBAction does not designate a data type for a return value; no value is returned. IBAction is a type qualifier that Interface Builder notices during application development to synchronize actions added programmatically with its internal list of action methods defined for a project...

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/EventOverview/EventHandlingBasics/EventHandlingBasics.html

>From Interface Builder you can generate a header file and implementation file for your Xcode project that include a declaration and skeletal implementation, respectively, for each action method defined for a class. These Interface Builder–defined methods have a return “value” of IBAction, which acts as a tag to indicated that the target-action connection is archived in a nib file. You can also add the declarations and skeletal implementations of action methods yourself; in this case, the return type is void.) The remaining required part of the signature is a single parameter typed as id and named (by convention) sender.

Listing 3-1 illustrates a straightforward implementation of an action method that toggles a clock’s AM-PM indicator when a user clicks a button.

Listing 3-1  Simple implementation of an action method
- (IBAction)toggleAmPm:(id)sender
{
...
}
...





_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:

This email sent to email@hidden

  • Follow-Ups:
    • Re: passing a method name?
      • From: Graham Cox <email@hidden>
    • Re: passing a method name?
      • From: Andy Lee <email@hidden>
References: 
 >Re: passing a method name? (From: Graham Cox <email@hidden>)

  • Prev by Date: Re: NSTableview datasource issues
  • Next by Date: Re: passing a method name?
  • Previous by thread: Re: passing a method name?
  • Next by thread: Re: passing a method name?
  • Index(es):
    • Date
    • Thread