• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Cocoa'sObjective-C中的retainproperty

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

如果在一个Objective-C类中定义一个retain属性的property,只有使用obj.var的形式去访问时才能使属性生效,即使用该成员变量的getter/setter方法,否则无法使得此属性生效,比如:

#import <Foundation/Foundation.h>

@interface MyController : NSObject
{
    NSString *ms;
}

@property(retain) NSString *ms;

- (IBAction)buttonPressed:(id)sender;

@end


我们先用访问属性的方式来访问ms成员变量:

#import "MyController.h"


@implementation MyController

@synthesize ms;

- (id)init
{
    self = [super init];
    if (self) {
        // Initialization code here.
    }
    
    return self;
}


- (IBAction)buttonPressed:(id)sender
{
    NSString *s = [[NSString alloc] initWithFormat:@"Hello"];
    
    self.ms = s;
    
    [s release];
    
    NSLog(@"The content is: %@", ms);
}

@end

 

这段程序将会非常正常地执行。尽管s在赋给self.ms后就调用了release方法,但由于self.ms的属性是retain,所以将s的字符串对象的引用计数加1,这样就把这个对象给保留住了。

如果我们将第23行改为:

ms = s;

那这段程序执行到NSLog就会崩溃。因为这里没有用ms的setter方法,retain属性没有生效。而此时s已经被释放,因此ms也就指向了一个无效对象。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap