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
分享到:
相关推荐
本示例将通过"aidlclientdemo"和"aidlserverdemo"两个项目,详细介绍如何使用AIDL进行简单的IPC操作。 首先,我们来理解AIDL的基本概念。在AIDL文件中,我们可以定义服务端提供的接口以及接口中的方法,这些方法会...
在本示例中,我们将深入探讨`FragmentTabHost`的使用方法,以及如何为小白开发者提供清晰的指导。 首先,我们需要理解`FragmentTabHost`的基本概念。它是`TabHost`的一个扩展,将`TabHost`与`Fragment`结合在一起,...
以下是一个简单的Java代码示例: ```java public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> { private List<String> dataList; public RecyclerViewAdapter...
本文将深入探讨“简单实用的webview示例代码”,并讲解如何复写`shouldOverrideUrlLoading`方法,以提升用户体验和控制页面加载行为。 1. **WebView基本用法** WebView是Android SDK提供的一种视图组件,它能够...
这个简单的示例展示了WebSocket在实时通信中的应用,以及Spring Boot和Stomp协议如何帮助我们简化开发过程。 在实际应用中,WebSocket可以应用于许多场景,比如实时聊天、股票行情、在线游戏等,其强大的实时性和...
虽然在简单示例中可能不会用到,但在涉及多个应用间数据共享或者需要暴露数据给其他应用时,ContentProvider是一个很好的选择。 总结来说,Android中的SQLite数据库提供了一种高效且灵活的方式来存储和管理应用数据...
在Android开发中,`TextView`是用于展示文本的常用组件,但它的功能远不止于简单的文字显示。当需要实现“富文本”效果时,`TextView`可以与`SpannableString`、`Spanned`或者`Html.fromHtml()`等工具一起工作,以...
在这个简单的Java Socket示例中,客户端向服务器发送一条消息,服务器接收到消息后立即回应,然后客户端打印出服务器的回应。这种模式常用于简单的命令应答或文件传输等场景。 总结来说,Java Socket编程提供了在两...
工厂模式是一种常用的面向对象设计...在实际项目中,无论是简单的一般工厂模式还是静态工厂模式,都可以根据需求选择合适的方式来实现对象的创建。理解并熟练运用工厂模式,对于提升代码质量和可维护性具有重要意义。
下面是一个使用`Timer`类创建定时任务的简单示例: ```java import java.util.Timer; import java.util.TimerTask; public class MyTimerExample { public static void main(String[] args) { // 创建一个Timer...
以下是对Fragment的三个简单示例的详细解释: 1. **加载两个Fragment** 在这个示例中,我们通常会创建两个Fragment类,例如`FragmentA`和`FragmentB`,它们分别代表不同的UI部分。然后,在布局文件中,可以预定义...
标题中的"mina简单示例"指的是使用Apache Mina框架构建一个简单的客户端和服务端的程序。在Java开发中,Mina提供了一种高效的方式来处理网络连接和数据传输,特别适合于构建大型、复杂的网络服务。 描述中的"mina...
这个简单的示例将帮助我们理解如何集成并使用SwipeMenuListView。 首先,我们需要在项目中引入SwipeMenuListView库。如果你使用的是Gradle构建系统,可以在`build.gradle`文件的dependencies部分添加依赖。例如: ...
假设我们有一个简单的 Android 应用程序,其中包含一个名为 `HelloWorld` 的类,该类继承自 `Activity`。在 `HelloWorld` 类中,我们需要重写 `onCreate()` 方法: ```java public class HelloWorld extends ...
在这个简单的示例中,我们将深入探讨Xlistview的基本用法、主要特点以及如何在实际项目中集成和使用。 首先,Xlistview的核心优势在于它的分段加载和下拉刷新功能。它支持上拉加载更多数据,当用户滚动到列表底部时...
本示例“动态使用Fragment简单示例”将详细介绍如何在运行时动态地添加和管理Fragment。 首先,我们需要理解Fragment的基本概念。Fragment是Android应用程序中的一个模块化组件,它可以在Activity中单独存在或者与...
1. **覆盖(Override)**:子类可以使用`override`关键字来重写基类的虚函数,确保在调用时执行子类的实现。这是多态的基础。 2. **新方法(New Method)**:如果子类只是想创建一个新的同名函数,而不是覆盖基类的...
通过以上步骤,我们就完成了Spring Boot连接Redis的简单示例。现在你可以启动项目,通过HTTP请求访问`/redis/set`、`/redis/get`和`/redis/delete`端点来测试Redis的存取和删除功能。 总结来说,本示例展示了如何在...
### WebService简单示例知识点详解 #### 一、概述 本文档主要介绍如何在Java环境下搭建和使用一个简单的WebService服务。通过本示例,读者能够了解WebService的基本概念、搭建流程及其实现方式。 #### 二、环境...
本示例将带你走进Openfire插件开发的世界,通过一个简单的Servlet插件来介绍开发流程。 首先,我们需要理解Openfire插件的基本结构。一个Openfire插件通常包含以下几个部分: 1. **Plugin.java**:这是插件的核心...