类的声明和对象的创建

一,类和对象。(定义一个类,类的首字母大写)

 1,  类属性的声明和类行为的实现:

   (1) 类的声明是在 .h 的头文件里,写在 @interface @end 之间。
   @inerface
   //
此处写声明
  
1 )声明整形。
   @property 
nonamotic int age;
  
2 )声明字符串 NSSring
   @property
nonamaotic copy NSSring *name;
  
   //
行为(方法)的声明

  
   @end
  
主意:属性声明的四个关键字 retain  assign  copy  readonly

retain 
如果属性是对象(引用数据类型),就用这关键字,他会做了两件事
  
  
1 )把原来的值内存计数 -1
  
2 )把新的内存计数 +1 并赋值   跟关键字 strong 有同样的作用
  
例如一个 person 类里引入一个 dog 类。
   @property 
nonamotic retain Dog *MyDog;
  
   assign
是默认的不用写。 直接赋值与 weak 一样。他用与基本数据类型,字符串除外,
   copy
复制,一些特殊对象类型,如果不希望和别人共享一个对象,或防止别人改动,用 copy ,他会自动创建一个一模一样的对象
 
  字符串就使用 copy
  
readonly 
只读,去掉 setter 方法,只有 getter 方法。
  
   @property
声明属时为我们做了三件事,
   1
,创建一个全局变量。
   2
,为其创建一个 setter 方法。
   3
,为其创建一个 getter 方法。
  
  
声明格式:
  
1 )声明整形。
   @property 
nonatomic int age;
  
2 )声明字符串 NSSring
   @property
nonatomic copy NSSring *name;
  
   nonatomic
非原子性操作,安全性低,效率高。
  
   atomic
原子性操作,在多线程操作的时候,一般是为了防止未写完时,别另一个线程读取,造成安全性的问题,这种操作耗费资源。
  
2
,类行为的实现写在 .m 文件里面   @implementation  @end 之间。
  
   @implementation
  
   —
void )行为名{
  
  

  
   @end
  
  
二,对象的使用和创建和初始化
  
创建的格式
  
类名   * 对象名=[[类名 alloc init ];
  
给对象赋值
  
就是给对象的属性赋值。
  
对象名 . 属性=
  
三,内存管理
  
1.
内存计数机制:每一个对象都有一个内存计数器 记录当前此对象被引用的次数 如果引用次数为 0 系统会自动调用该对象的 dealloc 方法   释放该对象
  
规则:谁加的谁负责减掉
   retain/strong:
会让 set 方法中做两件事 把原来的对象内存计数 -1   把新的对象内存计数 +1
   assign/weak:set
方法中只做一件事 赋值   没有涉及内存管理 修饰基本数据类型
   copy
set 方法中 做了复制的操作   创建了一个新的对象(计数为 1 和之前的对象就没有关系了
   readOnly:
只读   去掉了 set 方法
  
   retain
方法:会让内存计数 +1
   release
方法:让内存计数 -1
  
  
如何验证一个对象是否被释放掉 去对象类中添加 dealloc 方法 在此方法中 nslog 看是否执行
  
当一个对象被释放掉,系统会自动调用 dealloc 方法。
  
2
自动释放池:为了提高开发效率 创建对象的时候可以在对象后面加上一个 autorelease  当对象出了自动释放池的时候会 自动执行该对象的 release 方法 让内存计数 -1.
  
  
自动释放池语句 @autoreleasepool {  }

3
,工厂方法:工厂方法通常都实现了自动发送 autorelease 的消息,
  
  
用工厂方法创建的对象不需要手动管理内存。
  
4.
初始化方法:对象通过 alloc 方法创建出来之后 必须要进行初始化 init ,也可以自己定义带参数的初始化方法如: initWithFrame initWithName initWith 。。。。
   -(instancetype)initWithcolor:(NSString *)color andwight:(float) weight  andage:(int) age;
  
当前所处的类是什么就匹配什么,
  
   -(id)initWithcolor:(NSString *)color andwight:(float) weight  andage:(int) age;
   id
表示任意类,

 


  
.h 文件声明中所写
 -(
id )initWithcolor:(NSString *)color andwight:( float ) weight  andage:( int ) age;
  
.m 文件所写
 -(
id )initWithcolor:(NSString *)color andwight:( float )weight andage:( int )age {
   
// 调用父类的初始化方法,必须要写的。
   
self = [ super init];
   
// 判断创建对象是否成功。
    
if ( self ) {
       
       
self .color = color;
       
       
self .weight = weight;
       
       
self .age = age;
    }
   
return self ;
   
}
在所运行的地方
 dog *dg =[[dog  alloc]initWithcolor:
@"yellow" andwight:78.2 andage:10] ;

内存管理的注意点

1
,当一个对象赋值给全局变量时 为了保证此对象在使用的过程中不被系统自动释放 需要咱们自己加一个 retain 使用起来更踏实。

2
,当访问一个从来没有赋过值的变量的时候 变量值是 nil 不会出错 。当访问一个赋过值但是被释放过的对象时 变量值(地址)是有的 但是此值(地址)指向的对象已经不存在了 这时候就会崩掉



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值