举例讲解Objective-C中@property属性的用法剖析

更新时间:2023-05-18 19:27:17 阅读: 评论:0

举例讲解Objective-C@property属性的用法
这篇文章主要介绍了Objective-C@property属性的用法,包括@property的属性关键字的整理,需要的朋友可以参考下
学过c/c++的朋友都知道,我们定义struct/class的时候,如果把访问限定符(public,protected,private)设置为public的话,那么我们是可以直接用.号来访问它内部的数据成员的。比如
1
2
3
4
5
6
7
//in Test.h
class Test
{
晋升述职报告
public:
int i;
float f;
};
  我在main函数里面是可以通过下面的方式来使用这个类的:(注意,如果在main函数里面使用此类,除了要包含头文件以外,最重要的是记得把main.m改成,否则会报一些奇怪的错误。所以,任何时候我们使用c++,如果报奇怪的错误,那就要提醒自己是不是把相应的源文件改成.mm后缀了。其它引用此类的文件有时候也要改成.mm文件)
msie
1
2
3
4
5
6
//
Test test;
test.i =1;
test.f =2.4f;
NSLog(@"Test.i = %d, Test.f = %f",test.i, test.f);
  但是,在objc里面,我们能不能这样做呢?请看下面的代码:(新建一个警示教育体会objc类,命名为BaClass
复制代码 代码如下:


//in BaClass.h
@interface BaClass : NSObject{
@public
NSString *_name;
}

 接下来,我们在里面:
复制代码 代码如下:

BaClass *ba= [[BaClass alloc] init];
ba.name =@"t ba name";
NSLog(@"ba class's name = %@", ba.name);


  不用等你编译,xcode马上提示错误,请看截图:
请大家注意看出错提示“Property 'nam' not found on object of type BaClass*",意思是,BaClass这类没有一个名为name的属性。即使我们在头文件中声明了@public,我们仍然无法在使用BaClass的时候用.号来直接访问其数据成员。而@public,@protected@private只会影响继承它的类的访问权限,如果你使用@private声明数据成员,那么在子类中是无法直接使用父类的私有成员的,这和c++,java是一样的。
  既然有错误,那么我们就来想法解决啦,编译器说没有@property,那好,我们就定义property,请看代码:
复制代码 代码如下:


//in BaClass.h
@interface BaClass : NSObject{
@public
NSString *_name;
}
@property(nonatomic,copy) NSString *name;
//in BaClass.m
@synthesize name = _name;

  现在,编译并运行,ok崛起的近义词,很好。那你可能会问了@prperty是不是就是让”."号合法了呀?只要定义了@property就可以使用.号来访问类的数据成员了?先让我们来看下面的例子:
复制代码 代码如下:

@interface BaClass : NSObject{
@public
NSString *_name;
}
//@property(nonatomic,copy) NSString *name;
-(NSString*) name;
-(void) tName:(NSString*)newName;

  我把@property乳胶床垫品牌的定义注释掉了,另外定义了两个函数,nametName,下面请看实现文件:
复制代码 代码如下:

//@synthesize name = _name;
-
(NSString*) name{
return _name;
}
-(void) tName:(NSString *)name{
未缴纳社保证明if (_name != name) {
[_name relea];
_name = [name copy];
}
}

  现在,你再编译运行,一样工作的很好。why?因为我刚刚做的工作和先前声明@property所做的工作完全一样。@prperty只不过是给编译器看的一种指令,它可以编译之后为你生成相应的gettertter方法。而且,注意看到面property(nonatomic,copy)括号里面这copy参数了吗?它所做的事就是
复制代码 代码如下:
嘴边有痣好吗
_name = [name copy];
  如果你指定retain,或者assign,那么相应的代码分别是:
//property(retain)NSString* name;
_name = [name retain];德国代购
//property(assign)NSString* name;
_name = name;

  其它讲到这里,大家也可以看出来,@property并不只是可以生成gettertter方法,它还可以做内存管理。不过这里我暂不讨论。现在,@property大概做了件什么事,想必大家已经知道了。但是,我们程序员都有一个坎,就是自己没有完全吃透的东西,心里用起来不踏实,特别是我自己。所以,接下来,我们要详细深挖@property的每一个细节。
  首先,我们看atomic nonatomic的区别与用法,讲之前,我们先看下面这段代码:
复制代码 代码如下:

@property(nonatomic, retain) UITextField *urName; //1
@property(nonatomic, retain,readwrite) UITextField *urName; //2

本文发布于:2023-05-18 19:27:17,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/913907.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:成员   使用   数据   编译   访问   代码   注意
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图