594Delaying Methods. And cancelling the delaying of methods

Delaying a method should be by now fairly clear:

[self performSelector:@selector(myMethod) withObject:nil afterDelay:3];

But what, if you need to cancel the delayed perform request? That’s the way to do it:

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(myMethod) object:nil];

cancelPreviousPerformRequestsWithTarget‘ seems to be the current leader in the ‘Longest Objective C Method Name Competition” with 39 characters, not bad.

Let me know, if you find any more contenders…

536Adding a custom delegate

MyClassWithDelegate.h

#import <Cocoa/Cocoa.h>
 
@protocol MyClassWithDelegaet <NSObject>
@optional
- (void)myDelegateMethod:(NSString*)tsst;
@end
 
@interface MyClassWithDelegate : NSView {
	id <MyClassWithDelegate> delegate;
}
 
@property (nonatomic, assign) id <MyClassWithDelegate> delegate;
 
@end

 

MyClassWithDelegate.m

#import "MyClassWithDelegate.h"
 
@implementation MainView
 
@synthesize delegate;
 
- (void)anyEvent:(NSEvent *)e { // an event or something like that
	// send delegate
	[[self delegate] myDelegateMethod:@"sss"];
}
 
@end

Thanks to Jon Sterling for his digest of Apple’s ‘How Delegation Works

374Delay method execution, part II

[NSTimer scheduledTimerWithTimeInterval:1.0 
target:self selector: @selector(methodName:)  
userInfo:nil repeats:NO];

Alternative to Part I [35], has the possibility of repetetive calls.

58Delay method execution & passing objects along the way

Specific example. Deselect table cell after a certain time. TableView and indexPath are wrapped into an array and send along to the method for delayed execution.


- (void)tableView:(UITableView *)tView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"User selected row %d\n", [indexPath row] + 1);
// actions
[self performSelector:@selector(deselectTableCell:) withObject:[NSArray arrayWithObjects:tView, indexPath, nil] afterDelay:0.2f];
}

-(void) deselectTableCell:(NSArray *)array {
[[ [array objectAtIndex:0] cellForRowAtIndexPath:[array objectAtIndex:1] ] setSelected:NO];
NSLog(@"deselectTableCell" );
}

In additon to http://www.trembl.org/codec/35/

35Delay method execution

[self performSelector:@selector(methodName) withObject:nil afterDelay:0.10f];

update: http://www.trembl.org/codec/58/