2015.12.18 property定义属性变量 init初始化自定义 class的部分运用

property

  在之前的学习和运用当中,由于成员变量默认都是私有的(private),所以定义一个变量的时候都会手写出一段『getter』和『setter』的代码。但是由于这样写太麻烦了,所以引入了property(声明)和synthesize(实现)。而到了后来,synthesize也被省略掉了。

    eg:  @property (nonatomic, strong)NSString *name;

    这里,『property』帮我们完成了三个任务:1.声明了一个属性变量

                         2.声明了setter、getter方法

                         3.实现了setter、getter方法

  property中的关键字的:    

    atomic  原子操作 线程安全 有枷锁解锁机制 安全  (默认)

    nonatomic 非原子操作 线程不安全 速度快 效率高  (一般使用)

    strong  声明一个非自己创建的对象的所有权

        如果创建所有权之后 放弃只会放弃所有权,而不会释放内存 所有的都放弃所有权之后 系统会自动释放内存

        防止A创建物体后B使用,A放弃了之后,B就再也找不到了这种情况。

    retain  和strong一样

    weak  只使用而不产生所有权

    copy  重新复制对象 好处在于和原来的对象脱离了关系不受其影响 坏处在于内存加大了

        与Strong的区别就是是否脱离出来

    assign  对于C语言的基本数据类型用assign

    readonly  只读 相当于只提供getter方法

    readwrite  读写 默认



init

  init自定义个目的相当于构造方法,有的时候初始化的时候有一些默认值,还有就是页面加载数据的时机问题,防止加载了页面再填数据(不同步)。

    eg:

-(instancetype)initWithName:(NSString *)aName andage:(int)aAge{

            if (self =[super init]) {       //调用父类方法init 并且判断是否初始化成功

                self.name = aName;

                self.age = aAge;

            }

            return self;

        }

  自定义的时候可以有三种返回类型使用意义相同

    -(Person *)initWithName

    -(id)initWithName     //id是identify的缩写,某种程度上相当于void

    -(instancetype)initWithName      //是NSObject中init的类型,推荐使用



class

  @class 类名;——解决循环引用问题,提高性能

  @class仅仅告诉编译器,在进行编译的时候把后面的名字作为一个类来处理。

  (1)@class的作用:声明一个类,告诉编译器某个名称是一个类

  (2)开发中引用一个类的规范

    1)在.h文件中使用@class来声明类

    2)在.m文件中真正要使用到的时候,使用#import来包含类中的所有东西

  P.S.例如钥匙类中会包含锁,锁中又包含钥匙。相互#import会出错  因为一直互相引用

时间: 2024-10-31 13:49:04

2015.12.18 property定义属性变量 init初始化自定义 class的部分运用的相关文章

2015.12.14 宏定义 枚举 动态内存分配

宏定义 (#define) 宏定义的意义和用途:(习惯上,都是“k”开头) 1.为了让一些数据有意义. 2.类似于内联函数(使用简便). 3.输出日志的开关. (非零即真,0为“发布阶段”,1为“开发阶段”) 枚举 (enum) 枚举类型声明为一组相关的符号常数定义了一个类型名称.枚举用于“多项选择”场合,就是程序运行时从编译时已经设定的固定数目的“选择”中做出决定. 默认情况下,枚举中每个元素的基础类型是 int.可以使用冒号指定另一种整数值类型.默认是从0开始,后者会在前者之上+1. 动态内

Daily Scrumming* 2015.12.18(Day 10)

一.团队scrum meeting照片 二.成员工作总结 姓名 任务ID 迁入记录 江昊 任务1085 https://github.com/buaaclubs-team/temp-front/commit/57b3c2db282394e97a434c19fa3c8a7e31bb5e09 任务说明: 完成首页主体部分的开发并签入 主要完成以下工作: 完成每个通知的card 完成一些用户体验的细节设计   遇到问题与解决方案: CSS绘图.布局等不熟悉 解决方案:学习并使用position.bac

iOS 成员变量,实例变量,属性变量的区别,联系

在ios第一版中: 我们为输出口同时声明了属性和底层实例变量,那时,属性是oc语言的一个新的机制,并且要求你必须声明与之对应的实例变量,例如: 注意:(这个是以前的用法) @interface MyViewController :UIViewController { UIButton *myButton; } @property (nonatomic, retain) UIButton *myButton; @end 在现在iOS版本中: 苹果将默认编译器从GCC转换为LLVM(low leve

iOS开发中 类、对象、实例变量、成员变量、属性变量等区别和关系

类(class):具有相同属性和行为等同一类元素等总称,类是一个抽象的概念. 区分是类还是对象,看它能否继续被细分. 在OC中,类是表示对象类型的结构体,对象通过类来获取自身的各种信息.类由两个部分组成:*.h和*.m文件组成. *.m文件中 implemention部分是类的实现部分,内部包含类中的各种信息,包括各种实例方法或类方法. 类别( category):是为现有的类添加新方法的方式,通常以"类名称+类别名称"来命名. 类别中不能添加新的实例变量.但是可以在类别中添加属性.

iOS中的成员变量,实例变量,属性变量

在ios第一版中: 我们为输出口同时声明了属性和底层实例变量,那时,属性是oc语言的一个新的机制,并且要求你必须声明与之对应的实例变量,例如: 注意:(这个是以前的用法) @interface MyViewController :UIViewController { UIButton *myButton; } @property (nonatomic, retain) UIButton *myButton; @end 在现在iOS版本中: 苹果将默认编译器从GCC转换为LLVM(low leve

全局结构体变量的初始化以及将结构体变量转换为char类型输出问题

#include<stdio.h> #include<stdlib.h> struct node{ int a; int b; char c; char d; }; /*struct node A; 全局变量不能在这儿进行初始化,令我震惊啊,错误让你迷茫到死 A.a=1; A.b=2; A.c='a'; A.d='c';*/ //struct node A={1,2,'a','c'};但是这种写法可以 1:初始化和赋值不是一个概念. 2:// 在全局空间(即函数体之外)只能执行数据

《软件测试管理公开课》2015.8.7~8 深圳 2015.8.11~12 北京 2015.8.18~19上海,欢迎报名!

课时:13小时(2天) 在软件开发流程中构筑软件质量 --软件测试管理     2015.8.7~8 深圳 2015.8.11~12 北京 2015.8.18~19上海   [课程背景] 据中国软件行业协会研究报告显示,2010年1-11月,我国软件业呈快速增长态势,同比增长30%,增速比去年同期提高8.6个百分点,软件产业已成为中国高科技发展重要支柱之一,但中国软件产品质量保证手段以及测试流程和管理的规范性,与国外同行(美国.印度等)存在较大的的差距.      在软件业较发达的国家, 软件测

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

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

javascript:没有定义的变量和没有定义的属性

1. 没有定义的变量 window.onload = function() { alert(a); // 报错: Uncaught ReferenceError: a is not defined // alert不会执行 }; 2. 没有定义的属性 window.onload = function() { alert(window.a); // alert会执行,弹出'undefined' }; 总结: 用没有定义的变量--报错 用没有定义的属性--undefined 所有的变量都是windo