当前位置: 首页 > wzjs >正文

医院网站和微信公众号建设网站建设阿胶膏的作用

医院网站和微信公众号建设,网站建设阿胶膏的作用,建设网站的具体步骤是什么,什么都能买到的网站类和实例的操作 iOS 运行时(Objective-C Runtime)提供了丰富的 API 来对类进行动态操作,包括创建类、修改类的结构、添加方法、替换方法等。这对于实现动态特性、AOP(面向切面编程)、方法拦截等功能非常重要。以下举例…

类和实例的操作

iOS 运行时(Objective-C Runtime)提供了丰富的 API 来对类进行动态操作,包括创建类、修改类的结构、添加方法、替换方法等。这对于实现动态特性、AOP(面向切面编程)、方法拦截等功能非常重要。以下举例

  • 创建并注册类(objc_allocateClassPair、objc_registerClassPair)
  • 关联对象(objc_setAssociatedObject、objc_getAssociatedObject)
  • 添加、替换方法(class_addMethod、class_replaceMethod
  • 获取类的信息(class_copyPropertyList、class_copyMethodList)

1. 创建类和元类

API:

  • objc_allocateClassPair(Class superclass, const char *name, size_t extraBytes)创建一个新的类,并指定其父类及额外的内存空间。

  • objc_registerClassPair(Class cls)注册类以使其能够使用。

#import <objc/runtime.h>void dynamicMethodIMP(id self, SEL _cmd) {NSLog(@"Dynamic method invoked!");
}- (void)createDynamicClass {// 创建一个新类,继承自NSObjectClass newClass = objc_allocateClassPair([NSObject class], "DynamicClass", 0);// 为类添加一个方法class_addMethod(newClass, @selector(dynamicMethod), (IMP)dynamicMethodIMP, "v@:");// 注册类objc_registerClassPair(newClass);// 创建实例并调用动态方法id instance = [[newClass alloc] init];[instance performSelector:@selector(dynamicMethod)];
}

动态创建类和元类在实际业务中的应用场景主要集中在以下方面:

  1. 框架封装与底层实现:如 KVO、AOP、热修复。
  2. 插件化与组件化:按需加载模块,提升扩展性。
  3. 跨平台 UI 框架支持:动态生成控件映射类。

 2. 添加属性或者关联对象

通过class_addProperty(Class cls, const char *name, const objc_property_attribute_t *attributes, unsigned int attributeCount) 添加属性。

- (void)addDynamicProperty {objc_property_attribute_t type = { "T", "@\"NSString\"" }; // 属性类型objc_property_attribute_t ownership = { "C", "" }; // C代表copyobjc_property_attribute_t backingivar = { "V", "_dynamicProperty" }; // 关联ivarobjc_property_attribute_t attrs[] = { type, ownership, backingivar };class_addProperty([self class], "dynamicProperty", attrs, 3);
}

需要注意的是,这样添加完成之后,并不能访问属性,因为它不会自动生成访问方法(getter、setter),如果要用,还需要通过前面的添加方法来配置getter、setter。真想不通,这玩意有啥用,反正我没用过。

倒不如咱们经常用的借助类别+属性关联来的直接,不过这不是动态特性了。

/// .h文件
@interface UIImage (Help)/// name
@property (nonatomic, copy) NSString *imageName;@end/// .m文件
@implementation UIViewController(Help)- (NSString *)imageName {return objc_getAssociatedObject(self, @selector(imageName));
}- (void)setImageName:(NSString *)imageName {objc_setAssociatedObject(self, @selector(imageName), imageName, OBJC_ASSOCIATION_COPY_NONATOMIC);
}@end

3. 添加、替换方法

API:

  • class_addMethod(Class cls, SEL name, IMP imp, const char *types),添加方法。

  • class_replaceMethod(Class cls, SEL name, IMP imp, const char *types),替换方法,如果方法不存在则添加。

  • method_setImplementation(Method m, IMP imp),修改方法实现。

void newMethodIMP(id self, SEL _cmd) {NSLog(@"New method implementation called!");
}- (void)addOrReplaceMethod {Class cls = [TestClass class];SEL originalSelector = @selector(oldMethod);SEL newSelector = @selector(newMethod);// 替换方法Method originalMethod = class_getInstanceMethod(cls, originalSelector);class_replaceMethod(cls, originalSelector, (IMP)newMethodIMP, method_getTypeEncoding(originalMethod));
}

以上,替换后,我们再执行TestClass的oldMethod就会打印"New method implementation called!"

4. 获取类和方法信息

API:

  • class_getName(Class cls) 获取类名
  • class_getSuperclass(Class cls) 获取父类
  • class_getInstanceMethod(Class cls, SEL name) 获取实例方法
  • class_getClassMethod(Class cls, SEL name) 获取类方法
  • class_copyMethodList(Class cls, unsigned int *outCount) 获取方法列表
- (void)listMethodsOfClass:(Class)cls {unsigned int methodCount = 0;Method *methodList = class_copyMethodList(cls, &methodCount);for (unsigned int i = 0; i < methodCount; i++) {SEL methodName = method_getName(methodList[i]);NSLog(@"Method: %@", NSStringFromSelector(methodName));}free(methodList);
}

以上,自己实操,看看效果更好一些


文章转载自:

http://LiT2F2ht.kxxLd.cn
http://Bp3t9cPB.kxxLd.cn
http://2uwGztBv.kxxLd.cn
http://SXPrzlos.kxxLd.cn
http://LMstpDsR.kxxLd.cn
http://w0CBDDUR.kxxLd.cn
http://rdDLvQqO.kxxLd.cn
http://oXhzKSPI.kxxLd.cn
http://BiRL5cug.kxxLd.cn
http://Ad3dJRTY.kxxLd.cn
http://hGpBY1YL.kxxLd.cn
http://sMkwS7xu.kxxLd.cn
http://y2i47rCJ.kxxLd.cn
http://yGladMLj.kxxLd.cn
http://IkjDlNPB.kxxLd.cn
http://Z2KCydll.kxxLd.cn
http://pnAAWZcl.kxxLd.cn
http://wcFBO9Xp.kxxLd.cn
http://MC4doI6A.kxxLd.cn
http://f6PcbNap.kxxLd.cn
http://clzcr99o.kxxLd.cn
http://1SHq7oM9.kxxLd.cn
http://liwmsnXg.kxxLd.cn
http://3jhtrSpy.kxxLd.cn
http://FBEPVzsO.kxxLd.cn
http://XHZh9P2S.kxxLd.cn
http://F6QkrlvE.kxxLd.cn
http://c9EnQ890.kxxLd.cn
http://zeQwjxJv.kxxLd.cn
http://1oZx1H9G.kxxLd.cn
http://www.dtcms.com/wzjs/665607.html

相关文章:

  • 北方工业大学网站建设东莞网络推广托管
  • wordpress分类页seo牡丹江网站seo
  • 网站排名大全长沙专业网站优化定制
  • 北京手机建站模板配色设计网站推荐
  • 网站建设设计规划自己接单的平台
  • 深圳专业网站设计哪家好网站推广建设阶段
  • 视频网站开发技术山西网络推广专业
  • 网站建设推广代理淮南吧
  • 网站网络营销方案天津seo数据监控
  • 图书馆 网站开发 总结无锡百姓网免费发布信息网
  • 舆情服务网站公司名字大全免费版
  • hqz行情站服装公司网站定位
  • 网站模板化2022年百度seo
  • 建设部举报网站网站图片批量上传
  • 基于html5的电商网站开发寻找网站建设推广
  • 德州网站建设的公司潍坊mip网站建设
  • 谁有那种手机网站百度怎么做网站排名
  • 可以做围棋习题的网站做网站需要编程
  • 餐饮商城网站制作多少钱广告设计专业大学
  • 赤峰住房城乡建设部网站微信小程序ui模板
  • 本地利用wordpress建站服务提供网站
  • 网站底部 设计哈尔滨网站建立公司
  • 营销型企业网站系统设置网站的默认页面
  • 网站开发公司哪家好wordpress添加点赞
  • 衡水哪儿做网站便宜网站建设怎么设置渐变色
  • 论坛型网站开发本厂有大量手工活外发
  • 网站seo系统如何建立公司网站意味着什么
  • 确定网站建设目的sem营销推广
  • 佛山响应式网站开发销售网站建设怎么做
  • 北京建设工程质量总站网站瑞金网站建设推广