iOS中的指针

刚看到一篇文章说到iOS指针方面,这里简单写个Demo演示下指针之间的传递,先看下面的代码:

 1-?(void)viewDidLoad?{
2????[super?viewDidLoad];
3????UILabel?*?title?=?[[UILabel?alloc]?init];
4????title.text?=?@"Article?title";
5????title.backgroundColor?=?UIColor.redColor;
6????title.frame?=?CGRectMake(0,?0,?100,?50);
7????[self.view?addSubview:title];
8????[self?changeTitlte:title];
9????NSLog(@"%@",?title);
10}
11-?(void)changeTitlte:(UILabel?*)label
12{
13????label.text?=?@"New?article?title";
14????label.backgroundColor?=?UIColor.blueColor;
15????[label?removeFromSuperview];
16????label?=?nil;
17}

两个问题:
1、view中的title是否会被修改Text和backgroudColor属性;
2、log中输出是nil还是UILabel对象
我们还是先说答案:
1、会被修改;
2、输出UILabel对象

下面我们讨论下原因,也就是这次的主题指针变量。
1、首先我们解析一下上面代码的执行过程
2、在内存中创建UILabel对象,并将指针变量赋值给title;
3、通过title这个指针变量中的地址,找到其在内存中的对象,修改其text和- backgroundColor属性;
4、通过title这个指针变量中的地址,找到其在内存中的对象,修改其frame属性;
5、将UILabe添加到当前View中;
6、发送消息到changeTitle,将实参title拷贝传递给形参label;
7、通过label这个指针变量中的地址,找到其在内存中的对象,修改其text和backgroudColor属性;
8、将UILabel从当前View中移除;
9、将label这个指针变量,赋值nil;
10、打印log,输出title这个指针变量,输出如下:

1?<UILabel:?0x7fe754e050b0;?frame?=?(0?0;?100?50);?text?=?'New?article?title';?userInteractionEnabled?=?NO;?layer?=?<_UILabelLayer:?0x6000000a88c0>>
2

相信看完这个执行过程,你应该也完全明白了为什么输出不是nil而是UILabel的指针变量了。
那如果我们就是需要将title的对象赋值为nil该怎么办呢?
其实我们可以通过二级指针在操作内存中的对象

 1-?(void)viewDidLoad?{
2????[super?viewDidLoad];
3????UILabel?*?title?=?[[UILabel?alloc]?init];
4????title.text?=?@"Article?title";
5????title.backgroundColor?=?UIColor.redColor;
6????title.frame?=?CGRectMake(0,?0,?100,?50);
7????[self.view?addSubview:title];
8????[self?changeTitlte:&title];
9????NSLog(@"%@",?title);
10}
11-?(void)changeTitlte:(UILabel?*__strong?*)label
12{
13????[*label?setText:?@"New?article?title"];
14????[*label?setBackgroundColor:UIColor.blueColor];
15????[*label?removeFromSuperview];
16????*label?=?nil;
17}

简单说明下
1、设置参数二级强指针类型;
2、在发送参数到该消息时,通过“&”取地址符,获取title的地址进行传递;
3、label接受到UILabe对象的地址信息;
4、因为无法直接操作地址,则通过“*”解引用符,获取该引用地址的实际内存对象;
5、设置该对象的text和backgroundColor属性;
6、将该对象从当前View中移除
7、将该对象赋值为nil;
8、打印log,输出title这个指针变量,输出如下:

1(null)

上设置参数二级强指针类型,在发送参数到该消息时,需要通过“&”获取指针变量的地址,传递给label,label


?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,172评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,346评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,788评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,299评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,409评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,467评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,476评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,262评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,699评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,994评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,167评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,499评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,149评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,387评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,028评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,055评论 2 352

推荐阅读更多精彩内容

  • 你我相遇 像鱼尾划开的水波 淡淡的痕迹 渐渐地抹平 只记得你 冬日暖阳下唇角微扬 不曾去想 憩身角落里独自哭泣 回...
    青菜1004阅读 266评论 0 0
  • 为什么是在这里,而不是别的地方?为什么会烦,而不是侧耳倾听?位置决定你到底在哪里?想到哪些地方去?位置告诉你要成为...
    风在睡觉阅读 364评论 0 0
  • 突然觉得行走在这个热的火急火燎的城市自己也快要被融化了一样…… 什么才是安全感? 以前听朋友说安全感就是男朋友速速...
    戴蝴蝶结的豆豆阅读 203评论 0 1