- 浏览: 456198 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (538)
- C/C++ Primer (69)
- Objective-C Primer (102)
- Python Primer (19)
- JavaScript Primer (1)
- Java Primer (37)
- PHP Primer (17)
- 泛 Linux (37)
- Shell Script (21)
- APUE (21)
- UNP__1&2 (19)
- NetWork (7)
- Oracle周边 (38)
- Mysql里边 (6)
- Windows技 (9)
- 简单算法 & 数据结构 (14)
- 设计模式 (6)
- GTK历程 (12)
- 工具使用 (25)
- 杂事 (23)
- 一些概念 (17)
- Web方面 (10)
- myCodeTools (9)
- ^未 竟$ (13)
- 硬件通信 (2)
- Games (1)
最新评论
原文:http://www.onevcat.com/2012/04/objective-c-runtime/
动态类型(Dynamic typing)
动态绑定(Dynamic binding)
动态加载(Dynamic loading)
1、动态类型
而在实际使用中,往往使用introspection来确定该对象的实际所属类:
2、动态绑定
确定实例所属的类后,将某些属性和相应的方法绑定到实例上。
来确定对象是否可以对某个SEL做出响应。
Special Considerations
This method is called before the Objective-C forwarding mechanism is invoked. If respondsToSelector: or instancesRespondToSelector: is invoked, the dynamic method resolver is given the opportunity to provide an IMP for the given selector first.
3、动态加载
根据参数,动态地加载资源……
NSClassFromString的好处是:
1 弱化连接,因此并不会把没有的Framework也link到程序中。
2 不需要使用import,因为类是动态加载的,只要存在就可以加载。因此如果你的toolchain中没有某个类的头文件定义,而你确信这个类是可以用的,那么也可以用这种方法。
http://superart.wikidot.com/chinese:iphone-nsclassfromstring
------------------------------------
一开始感觉不出有什么用,直接传对象或者protocol就可以了。
这样能更放荡,用的所谓的oo思想,把所有对象都抽象为Object,
和上面的NSClassFromString是一种思想,从具象到相对抽象
用来做回调:http://www.wuleilei.com/blog/263
------------------------------------
来至:http://my.oschina.net/rareliu/blog/32022?catalog=86431
动态类型(Dynamic typing)
动态绑定(Dynamic binding)
动态加载(Dynamic loading)
1、动态类型
而在实际使用中,往往使用introspection来确定该对象的实际所属类:
id obj = someInstance; if ([obj isKindOfClass:someClass]) { someClass *classSpecifiedInstance = (someClass *)obj; // Do Something to classSpecifiedInstance which now is an instance of someClass //... }
2、动态绑定
确定实例所属的类后,将某些属性和相应的方法绑定到实例上。
来确定对象是否可以对某个SEL做出响应。
Special Considerations
This method is called before the Objective-C forwarding mechanism is invoked. If respondsToSelector: or instancesRespondToSelector: is invoked, the dynamic method resolver is given the opportunity to provide an IMP for the given selector first.
void dynamicMethodIMP(id self, SEL _cmd) { // implementation .... } //该方法在OC消息转发生效前被调用 + (BOOL) resolveInstanceMethod:(SEL)aSEL { if (aSEL == @selector(resolveThisMethodDynamically)) { //向[self class]中新加入返回为void的实现,SEL名字为aSEL,实现的具体内容为dynamicMethodIMP class_addMethod([self class], aSEL, (IMP) dynamicMethodIMP, "v@:"); return YES; } return [super resolveInstanceMethod:aSel]; }
3、动态加载
根据参数,动态地加载资源……
-(NSArray *)loadPadNibNamed:(NSString *)name owner:(id)owner options:(NSDictionary *)options { NSString *newName = [name stringByReplacingOccurrencesOfString:@"@pad" withString:@""]; newName = [newName stringByAppendingFormat:@"@pad"]; //判断是否存在 NSFileManager *fm = [NSFileManager defaultManager]; NSString* filepath = [[NSBundle mainBundle] pathForResource:newName ofType:@"nib"]; //这里调用的loadPadNibNamed:owner:options:实际为为交换后的方法,即loadNibNamed:owner:options: if ([fm fileExistsAtPath:filepath]) { return [self loadPadNibNamed:newName owner:owner options:options]; } else { return [self loadPadNibNamed:name owner:owner options:options]; } }
//OC Class c = NSClassFromString(@"Name"); //Java,忘光了~ Class c = Class.forName("Name"); URLClassLoader
NSClassFromString的好处是:
1 弱化连接,因此并不会把没有的Framework也link到程序中。
2 不需要使用import,因为类是动态加载的,只要存在就可以加载。因此如果你的toolchain中没有某个类的头文件定义,而你确信这个类是可以用的,那么也可以用这种方法。
http://superart.wikidot.com/chinese:iphone-nsclassfromstring
------------------------------------
SEL selfunc = NSSelectorFromString(NSString *str); //方法名称 if ([object respondsToSelector:selfunc]) { //判断方法是否存在 [object performSelector:selfunc]; //执行方法
一开始感觉不出有什么用,直接传对象或者protocol就可以了。
这样能更放荡,用的所谓的oo思想,把所有对象都抽象为Object,
和上面的NSClassFromString是一种思想,从具象到相对抽象
用来做回调:http://www.wuleilei.com/blog/263
------------------------------------
#import <objc/runtime.h> //重点 NSString *str; Mobj *obj = [[Mobj alloc] init]; //Mobj中有一私有属性NSString *mt_; object_getInstanceVariable(obj, "mt_", (void *)&str); NSLog(@"%@",str); [obj release];
来至:http://my.oschina.net/rareliu/blog/32022?catalog=86431
发表评论
-
float equal
2013-05-23 18:21 810- (BOOL)floatA:(float)f1 equalB ... -
Coding Guidelines for Cocoa
2013-05-17 16:53 662参考: https://developer.apple.com ... -
Cell
2013-05-16 14:32 783- (void)tableView:(UITableView ... -
Object-C编程规范
2013-05-15 10:49 7301.参考苹果的文档 “Coding Guidelines fo ... -
MacPorts
2013-02-28 18:12 607http://blog.csdn.net/lynjay/art ... -
KVC/KVO 监听对象属性变化
2013-01-10 23:09 7398http://blog.csdn.net/a6472953/a ... -
ios Associative 扩展属性
2013-01-08 16:45 1532@dynamic和@synthesize http://blo ... -
UITableView & UITextField
2012-11-08 00:35 829keyboard event ---------------- ... -
UIWebView
2012-10-24 11:06 741http://hi.baidu.com/wei_1123/it ... -
Device orientation
2012-10-15 16:20 742- (BOOL)shouldAutorotateToInter ... -
system notification
2012-10-12 15:22 624for UIApplication These notifi ... -
NSZombies
2012-08-09 08:51 664NSZombies搞定EXC_BAD_ACCESS http: ... -
Quartz 2D Programming Guide
2012-07-17 00:51 589Quartz 2D 内容不少啊 Graphics Trans ... -
NSCache
2012-07-12 14:25 751http://thenewself.blog.163.com/ ... -
NSCoding
2012-07-12 13:39 955@protocol NSCoding - (void ... -
分析 crash 报告的方法
2012-07-12 01:15 576http://blog.csdn.net/toss156/ar ... -
Multi-touch
2012-07-11 23:33 722智能与灵活与工作量>_< http://www.o ... -
iOS的多核编程和内存管理
2012-07-11 18:14 714http://anxonli.iteye.com/blog/1 ... -
NSCopying
2012-07-10 15:54 516http://www.apple.com.cn/develop ... -
NSTimeZone
2012-07-10 14:42 434http://developer.apple.com/libr ...
相关推荐
@objc dynamic var value: Int = 0 } ``` `@objc`还与Swift的自动合成有关。当Swift类继承自Objective-C的类,且Swift类中有一个与Objective-C父类同名的方法时,Swift会自动合成一个`@objc`方法,使得调用不会...
@objc dynamic var name: String? @objc dynamic var age: Int? } let user = UserModel() let dictionary = ["name": "John", "age": 30] user.setValue(dictionary, forKeyPath: "") ``` 这种方法减少了...
@objc dynamic var name = "" @objc dynamic var age = 0 @IceCream() static var iceCream: IceCreamType = .cloudKit(container: "yourCloudKitContainerID") } ``` 在这段代码中,我们声明了一个名为 `User...
例如,按钮被点击后改变文字或颜色,这可以通过KVO(Key-Value Observing)或者Swift的`@objc dynamic`属性来实现。 最后,不要忘记考虑按钮的响应区域。`frame`属性决定了按钮在屏幕上的位置和大小,`...
在Objective-C中,可以使用`+load`方法,而在Swift中,可以使用`@objc dynamic`修饰符和`init?(coder:)`初始化器。注册的代码示例如下: ```objc + (void)initialize { [NSBundle loadNibNamed:@"MyView" owner:...
3. **Method Resolution**:如果依然无果,Swift会尝试通过`@objc dynamic`属性来寻找方法实现。 4. **Forwarding**:最后,如果以上所有尝试都失败,就会触发消息转发。 **二、实现弱引用计时器** 在iOS应用中,...
3. 添加KVO(Key-Value Observing)或者使用Swift的`@objc dynamic`属性来监听`totalCount`和`currentCount`的变化。当这两个值改变时,触发`setNeedsDisplay()`来重新绘制进度条。 4. 实现计算进度的方法,如`...
2. **设置内容观察者**:为了监听文本内容的变化,可以为编辑器添加一个KVO(Key-Value Observing)观察者,或者使用Swift的`@objc dynamic`属性和`didSet`观察器。当文本内容改变时,触发回调更新高度约束。 3. **...
8. 属性观察者:为了实时响应页面位置的变化,开发者可能会使用KVO(Key-Value Observing)或者Swift的`@objc dynamic`和`didSet`来监听和更新页面状态。 综上所述,"swift-带有滑动弹性效果PageViewController...
Objective-C中的一个常见实现是使用`Method Swizzling`,而在Swift中,可以通过`@objc dynamic`属性和`method_exchangeImplementations`函数实现类似效果。 2. **避免基类继承**: 基类继承通常会导致类层次结构...
Swift中也可以用`@objc dynamic`和`willSet/didSet`属性观察器实现类似功能。 现在,让我们看下`ZWMusicDownLoadView-master`这个压缩包中的资源。这个项目很可能包含了一个自定义的Swift类,名为`...
@objc dynamic var receiverKey: String? } ``` **3. 自定义初始化方法** 创建一个自定义的初始化方法,接受必要的参数,这样在创建ReceiverViewController实例时可以直接传递值。这种方法简单直接,但可能需要更...
@objc dynamic var username = "John Doe" } class ViewController: UIViewController { var viewModel = ViewModel() override func viewDidLoad() { super.viewDidLoad() observeViewModelChanges() } ...
@objc dynamic var title: String = " " } AppDelegate application. registerForRemoteNotifications () syncEngine. register ( models : [SimpleNote. self ]) syncEngine. start () 同步 syncEngine.sync() ...
它以“纯” Swift 5.2编写有,和编写,可用于@objc dynamic Swift函数或Objective-C实例方法。 InterposeKit的灵感是中的,需要进行一些棘手的修改才能解决,我还在写下了。 该库不基于, 使用直接替换实现。 这...
每个属性都需要声明为`dynamic`,并标记为`@objc dynamic var`,以供 Realm 使用。 ```swift import RealmSwift class User: Object { @objc dynamic var name = "" @objc dynamic var email = "" } ``` 3. **...
这里,`@objc dynamic` 关键字用于指示 Realm 需要处理这些属性。一旦定义了数据模型,我们就可以像操作 Swift 对象一样操作 Realm 对象。 插入数据到 Realm: ```swift let user = User() user.name = "Alice" ...
正确使用@objc和dynamic标记是关键,它们确保了Swift中类的属性可以被Objective-C的消息传递机制所访问,并且属性的setter方法可以被动态生成,从而使KVO能够正常工作。需要注意的是,虽然Swift带来了现代编程语言的...
@objc dynamic var email = "" } ``` 3. **初始化Realm**: 在需要使用Realm的地方,创建一个`Realm`实例。通常在`AppDelegate`中初始化并用于整个应用程序。 ```swift let realm = try! Realm() ``` 4. **插入和...