先写一个简单的自定义类
@interface PGYer : NSObject
@property(copy) NSString * uKey;
覆写init方法,为了方便起见我们把今天要说的东西放在init中
#import "PGYer.h"
#import <objc/runtime.h>
@implementation PGYer
@synthesize uKey = _uKey//此处是关键
-(instancetype)init{
NSLog(@"%@",NSStringFromClass([super class]));
if (self = [super init]) {
NSLog(@"%@",NSStringFromClass([self class]));
NSLog(@"%@",NSStringFromClass([super class]));
Ivar ivar = class_getInstanceVariable([self class], "uKey");
object_setIvar(self, ivar, @"1234546");
id uKey = object_getIvar(self, ivar);
NSLog(@"%@",uKey);
}
return self;
}
@end
我们来看一下打印信息
我们看到最下边打印为空。
那么我们来分析一下流程:
1通过class和属性名称获取c语言类型的属性变量Ivar
2.调object_setIvar给C类型的变量赋值
3调用object_getIvar从C类型的变量中获取属性值
整个流程看似完全没有问题
但是 我们忽视了一个问题
@synthesize uKey = _uKey//此处是关键
默认是这样绑定,因此,此时的属性名称的C写法是:_uKey
我么修改一下代码:
Ivar ivar = class_getInstanceVariable([self class], "_uKey");
然后我们看一些截图数据
由截图可以看出,系统默认把
@property(copy) NSString * uKey;转化为内部的_uKey
那么我们再次修改一下代码
再内部添加一个_uName属性
@interface PGYer : NSObject
{
NSString *_uKey;
NSString *_uName;
}
@property(copy) NSString * uKey;
@end我们再次通过Ivar进行赋值
Ivar nameVar = class_getInstanceVariable([self class], "_uName");
object_setIvar(self, nameVar, @"YuLongLe");
id aName = object_getIvar(self, nameVar);
NSLog(@"name %@",aName);
最后我们看一下debug模式下的情况:
我们可以看出成功的给_uName进行了赋值。
其实Xcode在之前的旧时代是
@propert和@synthesize是成对出现的,只是随着更新的加快,开发者已经无需手动添加synthesize,而是由编译器自动给添加了“_”,当然了,用户也可手动修改
相关推荐
这儿的运行时系统扮演的角色类似于Objective-C语言的操作系统,Objective-C基于该系统来工作。本文档将具体介绍NSObject类以及Objective-C程序是如何和运行时系统交互的。特别地,本文档还给出来怎样在运行时动态地加
Objective-C语言的许多决策可以在编译和运行时执行。只要有可能,它是动态的。这意味着Objective-C语言不仅需要一个编译器,还需要一个运行时系统来执行编译的代码。Runtime系统是一种用于Objective-C语言的操作系统...
希望这个简单的Objective-C语言教程能够为你提供一个入门的起点。Objective-C是一种面向对象的编程语言,广泛应用于Mac OS和iOS开发。通过学习Objective-C的基本语法、类和...祝你在学习Objective-C的过程中取得成功!
《objective-c程序设计》通过大量的实例系统地介绍了objective-c语言的基本概念、语法规则、框架、类库及开发环境。读者在阅读《objective-c程序设计》后,可以掌握objective-c语言的基本内容,并进行实际的iphone/...
《Objective-C 程序设计(第4版)》已经为iOS 5和Xcode4.2中的重大变更做了全面更新,最大的改动是引入了自动引用计数(ARC),并详细说明了如何在Objective-C编程过程中使用ARC提升和简化内存管理。
用Objective-C语言实现了各种设计模式,收集各种例子,方便大家学习和普及设计模式。.zip用Objective-C语言实现了各种设计模式,收集各种例子,方便大家学习和普及设计模式。.zip用Objective-C语言实现了各种设计...
C语言主要知识点巩固(学习Objective-C 的前提),PPT格式。
中文名: Objective-C基础教程 作者: Mark Dalrymple Scott Knaster译者: 高朝勤 杨越 刘霞图书 分类: 软件 资源格式: PDF 版本: 扫描版 出版社: 人民邮电出版社 书号: ISBN: 9787115208774 发行时间: 2009...
Objective-C 基础教程,从入门到精通 Objective-C 基础教程,从入门到精通,是你学习 Objective-C 的经典之作。
Objective-C 是一种通用、面向对象的编程语言,广泛应用于 macOS 和 iOS 等苹果平台的开发中。它是 C 语言的超集,结合了 Smalltalk 式的消息传递机制和 C++ 的特性。Objective-C 是苹果公司采用的主要编程语言之一...
在windows系统下搭建Objective-C开发环境,由于公司要做iphone开发,个人学习objc(Objective-C)语法,所以在windows7下搭建了一个objc开发环境,现把自己整理的帮助文档拿来与大家分享,希望能对大家有所帮助。...
Objective-C是创建Mac OS应用和iPhone应用的主要语言,优雅的面向对象编程环境与C语言特性珠联璧合,造就了它的不俗表现。 本书全面而系统地讲述Objective-C语言的基础知识和面向对象编程的重要概念,结合实例...
elcome to Learn Objective- C on the Mac! This book is designed to teach you the basics of the Objective- C language. Objective- C is a superset of C and is the language used by many (if not most) ...
这是一个基于Objective-C语言的基础案例集。旨在用于给初学者快速了解Objective-C语言的语法。.zip
Objective-C是扩展C的面向对象编程语言,也是iPhone开发用到的主要语言。本书结合理论知识与示例程序,全面而系统地讲述Objective-C编程的相关内容,包括Objective-C在C的基础上引入的特性和Cocoa工具包的功能及其中...
Objective-C高级编程 iOS与OS X多线程和内存管理.pdf
资源里面包含Objective-C 2.0程序设计 原书中文版第2版及代码,还包含Effective Objective-C 2.0英文版完整的电子书