Comments (10)
@zhaoxuezhi 可以通过MFContext的- (void)setObject:(MFValue *)value forKeyedSubscript:(NSObject *)key; 动态扩展所需要的C函数。
from mango.
您好:
1、如何在 demo.mg 中动态扩展 C 函数,例如我所提的问题,修复线上的信号量 bug ?
2、关于:在MangoFix中注入全局对象,没有get 到具体的使用场景,是要预先在 OC 代码中设置,还是在 demo.mg 中去添加 ?
关于以上,希望能有参考代码。非常感谢!!
from mango.
@zhaoxuezhi 将需要的C函数用block进行封装,然后将block注入到MangoFix作为全局变量,然后调用block。
from mango.
@YPLiang19 根据您的提示发现有崩溃,以下为代码及崩溃信息截图,帮忙看下什么原因造成的 ?
class HLJSearchConfigApi : HLJClientBaseRequest {
- (void)requestSearchRecommond {
// 定义 block
block semaphoreBlock = ^(dispatch_semaphore_t se){
dispatch_semaphore_signal(se);
};
// 获取 MFContext 变量
MFValue *value = MFValue.valueInstanceWithBlock:(semaphoreBlock);
AppDelegate *delegate = UIApplication.sharedApplication.delegate;
MFContext *context = delegate.mfContext;
// 设置全局变量
context.setObject:forKeyedSubscript:(value,@"dispatch_semaphore_signal");
// 调用 block, semaphore 在类初始化时已初始化
semaphoreBlock(self.semaphore);
}
from mango.
@zhaoxuezhi 预埋要在APP中预埋。
from mango.
@YPLiang19 预埋是 OK 的。
有个疑问 - (void)setObject:(MFValue *)value forKeyedSubscript:(NSObject *)key
这个方法的设计初衷就是要在 APP 中执行的吗 ? 我在 demo.mg 中使用了该方法,设置和数据读取都是 ok 的, 推荐这样写吗 ? 是否安全 ?
// 设置全局变量
class HLJNewSearchResultViewController : BaseViewController {
- (void)beginNewSearch {
// 获取 MFContext
AppDelegate *delegate = UIApplication.sharedApplication.delegate;
MFContext *context = delegate.mfContext;
// 设置全局变量
MFValue *value = MFValue.valueInstanceWithObject:(@"测试 MF 插入");
context.setObject:forKeyedSubscript:(value,@"setTestValue");
// 回调原方法
self.ORGbeginNewSearch();
}
}
`
// 读取全局变量
class HLJProductDetailViewController : BaseViewController {
- (void)viewDidLoad {
// 获取 MFContext
AppDelegate *delegate = UIApplication.sharedApplication.delegate;
MFContext *context = delegate.mfContext;
// 读取全局变量
MFValue *value = context.objectForKeyedSubscript:(@"setTestValue");
NSLog(@"value = " + value.objectValue + @"\n");
// 回调原方法
self.ORGviewDidLoad();
}
}
from mango.
在mg文件中可以使用,但是无法注入C函数
from mango.
@YPLiang19 OK,非常感谢!!
from mango.
@zhaoxuezhi 建议升级到1.1.9, 1.1.9添加了大量的GCD API,其中就包括dispatch_semaphore相关的API
from mango.
@YPLiang19 赞 !
from mango.
Related Issues (20)
- 和jspatch除了dsl区别在哪里? HOT 3
- 关于 super 直接使用 objc_msgSendSuper 实现的问题
- demo had memory leaks
- frame或者bounds为null HOT 3
- 在模拟器上运行不起来
- 设置label.text或textField.text或textView.text,字符串长了就崩溃 HOT 1
- swift啥时候有计划呀 HOT 2
- 关于RSA加密的问题 HOT 3
- 审核能过吗
- 是否可以加个通过公钥加载补丁文件的方式 HOT 1
- 脚本带 if (xx && xx) 或 if (xx || xx) 时可能存在内存泄漏 HOT 1
- 子类的初始化方法中通过super调用父类的初始化方法,参数会变为nil,大家有遇到这个问题吗,或者应该怎么解决 HOT 3
- 大佬有提供mangofix的静态framework库么,我需要手动导入
- 关于类型转换的问题 HOT 1
- swift 调用原有方法只能是@objc修饰过的吗?
- 一个mg文件里可以放多个类么,还是说一个mg文件只能对应一个类的修复 HOT 1
- category可以吗?如何更新category的方法呢? HOT 1
- Terminating app due to uncaught exception 'MFRuntimeErrorNotFoundCFunction' HOT 2
- 支持NSObject+xxxx,基类扩展的hook吗?
- Grammar conflicts
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from mango.