作为笔记:Objective-C属性property的一些认识

在头文件中声明:

@property (nonatomic,strong) NSString * str;

在oc中,这一行代码表示一个名为str的属性。

在实现文件.m中声明:

@synthesize str;

在oc中类中声明了这一句话就会自动生成两个方法(生成属性的getter和setter),一个属性,如果实现了属性(在.m文件中)则会生成一个实例变量。

在类别中声明了了属性则会自动生成两个方法,则必须实现setter和getter,类别中属性要用@dynamic,但是不会生成实例变量。

在类拓展中声明了属性则必须再所属类的.m文件中实现,并且不会setter,getter,实例变量。

在协议中声明的属性必须在遵循接口的类的.m文件中实现,否则会提示警告,并且不会setter,getter,实例变量。

总结下:在类中声明了属性可以不写实现,系统可以自动实现,但是在类别,类扩展和协议中声明的属性则必须实现,否不会生效,因为系统不会自动生成getter,setter。同时类拓展可以为类添加私有变量和私有方法,类别只可以为类添加方法,不能添加其他任何东西。属性的最终目的在于两个:方法,实例变量。

(这是经验总结出来的O(∩_∩)O哈哈~)

1.assign,retain,copy的区别:

1 NSString * newstr=[str assign];
2 NSString * newstr=[str retain];
3 NSString * newstr=[str copy];

原str地址:0x1111 内容:0x2222,存储内容地址 0x2222,内容:@"abc"

变量符号      地址           内容       地址         内容

assign       newstr      0x1111   0x2222    0x2222    @"abc"

retain        newstr      0xaaaa    0x2222    0x2222    @"abc"

copy          newstr      0xcccc     0x3333    0x3333    @"abc"

asssign 相于于指针赋值,不对引用计数进行操作,注意原对象不用了,一定要把这个设置为nil
retain 相当于对原对象的引用计数加1
copy 不对原对象的引用计数改变,生成一个新对象引用计数为1

这就是assign,retain,copy在内存角度上的区别。

2.原子性

atomicity,nonatomic(默认atomicity,单线程)

即是否为单线程操作。

可读,可写性:readwirte,readonly(默认是可读写)

3.strong 和weak (引自别人文章^_^)

iOS 5 中对属性的设置新增了strong 和weak关键字来修饰属性(iOS 5 之前不支持ARC)

strong 用来修饰强引用的属性;

@property (strong) SomeClass * aObject;

对应原来的
@property (retain) SomeClass * aObject; 和 @property (copy) SomeClass * aObject;

weak 用来修饰弱引用的属性;
@property (weak) SomeClass * aObject;
对应原来的

@property (assign) SomeClass * aObject;

就先写这么多,等继续研究后再补充。。

作为笔记:Objective-C属性property的一些认识,布布扣,bubuko.com

时间: 2024-10-22 01:36:46

作为笔记:Objective-C属性property的一些认识的相关文章

Effective C# 学习笔记(原则一:始终能的使用属性(property),而不是可直接访问的Data Member)

原则一:始终能的使用属性(property),而不是可直接访问的Data Member    Always use properties instead of accessible data members. 为什么要使用属性: 1.Net的data binding只支持Property,而不支持public data member的访问 Data binding的目的就是把一个object的Property绑定到一个用户界面的control上,web control或者windows form

Objective-C基础5 : 属性@property

1.类里面经常有一些变量需要进行set和get操作,OC中提供了方便的属性@property来替换set和get方法,这样能减少频繁且简单的重复代码.如下代码: @interface Person : NSObject @property NSString* strName; @property int nAge; @end @implementation Person @synthesize strName; @synthesize nAge; @end 通过在类声明变量前面添加@proper

Swift学习笔记十:属性

1.存储属性       1. 作为特定类或结构实例的一部分,存储属性存储着常量或者变量的值.存储属性可分为变量存储属性(关键字var描述)和常量存储属性(关键字let描述). struct student{ let name = "" var score = 0 } let a = student(name:"小笨狼",score:96)           注意:                ① 定义储存属性时,需要为每一个属性定义一个默认值.在初始化的时候,

python静态属性----property

1.什么是静态属性property property是一种特殊的属性,访问它的时候会执行一段功能(函数)然后返回值. 在使用者直接要某个结果的时候,就需要用到了静态属性. 2.例子 计算BMI指数. class People: def __init__(self,name,tz,hit): self.name=name self.tz=tz self.hit=hit @property def bmi(self): return self.tz / (self.hit**2) p=People(

属性(property)与成员变量(ivar)

类内使用成员变量{}, 类外使用属性@property /*********** --- Person.h */ @interface Person : NSObject { NSString *_name; } @property (nonatomic, copy) NSString *sex; @property (nonatomic, assign) int age; - (void)getPropertyAndiVar; @end /*********** --- Person.m */

WPF笔记(1.3 属性元素)——Hello,WPF!

原文:WPF笔记(1.3 属性元素)--Hello,WPF! 这一节中“属性元素”的概念可以用匪夷所思形容.1.WPF用标签元素实现对象建模,有两种:Control和Container,都用来装载内容和行为,前者如Button,后者如Window.你可以这样写: <Window >  <Button Width="100" Height="100">    <Image Source="tom.png" /> 

iOS runtime探究(三): 从runtime开始理解OC的属性property

你要知道的runtime都在这里 转载请注明出处 http://blog.csdn.net/u014205968/article/details/67639303 本文主要讲解runtime相关知识,从原理到实践,由于包含内容过多分为以下五篇文章详细讲解,可自行选择需要了解的方向: 从runtime开始: 理解面向对象的类到面向过程的结构体 从runtime开始: 深入理解OC消息转发机制 从runtime开始: 理解OC的属性property 从runtime开始: 实践Category添加属

实例变量(instance var)与属性(@property)的关系

实例变量(instance var)与属性(@property)的关系 Objective-C 2.0之后,声明一个@property name自动产生一个实例变量,名为_name,因此省去实例变量和属性重复输入的麻烦.而使用@synthesize可以改变_name名称.@property和@synthesize不必成对出现. @property name:指示编译器自动合成setter和getter方法,setter方法名即setName,而getter方法名即name.@property后面

属性( @property )与成员变量的那些事 :

属性( @property )与成员变量的那些事 : 属性对成员变量扩充了存取方法 . 属性默认会生成带下划线的成员变量 . 早期的 Xcode 不支持自动合成成员变量的存取方法 , 所以古老的iOS工程师是愤怒的 . 后来 Xcode 智能了一点 , 可以用 @synthesize 关键字自动合成成员变量的存取方法 , 此时的iOS工程师是郁闷的 . 现在 Xcode 会在我们声明属性时自动合成存取方法 , 连@synthesize都不用写了 , 这样iOS工程师彻底解放了 . 顺便提一下 @