override的简单示例

overrideAppDelegate.h

 

#import <UIKit/UIKit.h>

@interface overrideAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;

@end

 

overrideAppDelegate.m

 

#import "overrideAppDelegate.h"
#import "NSString+Addition.h"

@implementation overrideAppDelegate

@synthesize window;

#pragma mark -
#pragma mark Application lifecycle

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
	[window makeKeyAndVisible];    
    if ([NSString swizze]) {
        NSString *s1 = @"Hello, everyone";
		char *s2 = (char *)[s1 UTF8String];
		NSLog(@"%s", s2);
    }    
    return YES;
}

#pragma mark -
#pragma mark Memory management

- (void)dealloc {
    [window release];
    [super dealloc];
}

@end

 

NSString+Addition.h

 

#import <Foundation/Foundation.h>

@interface NSString (NSString_Addition)

+ (BOOL)swizze;

@end

 

NSString+Addition.m

 

#import "NSString+Addition.h"
#import <objc/objc-class.h>

#define CSTRING_CUSTOM_ADDITON "^_^"

@implementation NSString (NSString_Addition)

- (const char *)ovUTF8String {
	char *sOriginal = (char *)[self ovUTF8String];
	int iOrgLen = (NULL == sOriginal ? 0 : strlen(sOriginal));
	char *sCustom = (char *)malloc(iOrgLen + strlen(CSTRING_CUSTOM_ADDITON) + 1);
    if (NULL != sCustom) {
        if (NULL != sOriginal) {
            strcpy(sCustom, sOriginal);
        } 
        strcat(sCustom, CSTRING_CUSTOM_ADDITON);
    }
	return (const char *)sCustom;
}

+ (BOOL)swizze {
    Method oldMethod = class_getInstanceMethod(self, NSSelectorFromString(@"UTF8String"));
    if (!oldMethod)
		return NO;
	Method newMethod = class_getInstanceMethod(self, NSSelectorFromString(@"ovUTF8String"));
	if (!newMethod)
		return NO;
	method_exchangeImplementations(oldMethod, newMethod);
	return YES;
}

@end

你可能感兴趣的:(ios,override,iPhone)