OC第九天笔记2016年03月24日(周四)A.M

1.  打开ARC:-fobjc-arc

关闭ARC:-fno-objc-arc

2.  在ARC中内存回收由编译器完成

声明对象之后,未将对象置为nil,则对象作用域结束时,空间才会被回收;如果将对象置为nil,则对象的空间会立即回收。

3.  __strong __weak

__strong:强引用,拥有某一块堆空间的所有权。默认。

__weak:弱引用,仅拥有使用权。

一旦强引用置为nil,弱引用会被自动置为nil。

声明属性:如果属性为对象实例变量,赋值方式strong,否则使用weak。

-----------------------main-------------------------------

 1 <font size="3"><font size="3">#import <Foundation/Foundation.h>
 2 #import "Student.h"
 3
 4 int main(int argc, const char * argv[]) {
 5     @autoreleasepool {
 6
 7         Student* s = [[Student alloc] init];
 8         [s setValue:@"语文" forKeyPath:@"course.courseName"];
 9
10         [s print];
11
12         //键:必须与实例变量同名
13         [s setValue:@"lily" forKey:@"name"];
14         [s print];
15         [s setValue:[NSNumber numberWithInt:10] forKey:@"age"];
16         [s print];
17
18         //对课程设置
19         Course* c = [[Course alloc] init];
20         [c setValue:@"math" forKey:@"courseName"];
21
22         [s setValue:c forKey:@"course"];
23         NSLog(@"%lu",[c retainCount]);
24
25         //对s的课程名称进行修改
26         [s setValue:@"English" forKeyPath:@"course.courseName"];
27         [s print];
28         [s valueForKeyPath:@"course.courseName"];
29
30
31         NSLog(@"%@",[s valueForKey:@"name"]);
32         NSLog(@"%@",[s valueForKey:@"age"]);
33
34         [c release];
35         [s release];
36
37         //脱字符:^
38         //块的返回值类型(^块的名字)(形参列表);
39         //块的实现基本格式。
40         //^(形参列表){//实现语句}
41         __block int a = 20;//被__block修饰的变量可以在块中被修改,否则只能读取值
42         a++;
43
44         int(^myblock)(int);
45         myblock = ^(int n){
46             NSLog(@"块");
47             return n+1;
48         };
49         NSLog(@"%d",myblock(10));//使用块。
50
51     }
52     return 0;
53 }
54 </font></font>

-----------------------Student.h-------------------------------

 1 <font size="3">#import <Foundation/Foundation.h>
 2 #import "Course.h"
 3
 4 //kvc kvo:course.courseName 学生:观察者
 5
 6 @interface Student : NSObject
 7 {
 8     NSString* name;
 9     int age;
10     Course* course;
11 }
12
13 -(void)print;
14
15 @end</font>

-----------------------Student.m-------------------------------

 1 <font size="3">#import "Student.h"
 2
 3 @implementation Student
 4
 5 -(id)init
 6 {
 7     if (self = [super init]) {
 8         name = [[NSString alloc] initWithFormat:@"lily"];
 9         course = [[Course alloc] init];
10         age = 0;
11     }
12     //添加观察者,  观察者:学生 观察的实例变量:course.courseName
13     [course addObserver:self forKeyPath:@"courseName" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:NULL];
14     return self;
15 }
16
17
18 //一旦观察者观察的实例变量变化,此方法会被回调
19
20 -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context
21 {
22 //    NSLog(@"%@",change);
23     NSLog(@"新的课程名称发生变化了,为:%@",[change objectForKey:@"new"]);
24     NSLog(@"旧的课程名称发生变化了,为:%@",[change objectForKey:@"old"]);
25 }
26
27 -(void)print
28 {
29     NSLog(@"name: %@  age: %d", name, age);
30     [course print];//代码复用
31 }
32
33 -(void)dealloc
34 {
35     //移除观察者
36     [course removeObserver:self forKeyPath:@"courseName"];
37     [name release];
38     [course release];
39     [super dealloc];
40 }
41
42 @end</font>

-----------------------Course.h-------------------------------

1 <font size="3">#import <Foundation/Foundation.h>
2
3 @interface Course : NSObject
4 {
5     NSString* courseName;
6 }
7 -(void)print;
8 @end</font>

-----------------------Course.m-------------------------------

 1 <font size="3">#import "Course.h"
 2
 3 @implementation Course
 4
 5 -(void)print
 6 {
 7     NSLog(@"coursename%@",courseName);
 8 }
 9
10 -(void)dealloc
11 {
12     [courseName release];
13     [super dealloc];
14 }
15
16 @end
17 </font>

时间: 2024-12-14 13:42:32

OC第九天笔记2016年03月24日(周四)A.M的相关文章

OC第八天笔记2016年03月23日(周三)A.M

1.     NSFileManager: ----------------------main--------------------------- 1 <font size="3">#import <Foundation/Foundation.h> 2 #import "Student.h" 3 int main(int argc, const char * argv[]) { 4 @autoreleasepool { 5 6 //1.

OC第七天笔记2016年03月22日(周二)A.M

1. 可变字符串 NSMutableString* mstr = [[NSMutableString alloc] initWithCapacity:10]; 增 删 改 替换 //[mstr length] [mstr insertString:@"http://" atIndex:0]; //第一个参数:即将要插入的字符串 //第二个参数:插入的位置(下标) NSLog(@"%@",mstr); //http://www.baidu.com [mstr inse

OC第六天笔记2016年03月21日(周一)A.M

在OC中,我们通过使用协议和分类来实现多继承的效果. 协议只能声明方法,而不能有任何实例变量. 声明协议: @protocal protocolName<protocol ,…> @optional //可选择的 @require//必须的  默认 @end eg: 1 @protocal rules<NSObject > 2 3 4 5 @interface abc: NSObject <rules> 6 7 @end //协议中只有方法声明,没有实例变量 在类中的实

OC第四天笔记2016年03月18日(周五)A.M

在OC中没有多继承 继承方式公有继承:派生类对象可以当做基类对象来使用 类中实例变量的默认权限为受保护,方法默认权限公有. 类中方法都是虚方法 在OC继承中,基类的所有成员都可以被派生类继承. 在派生类中定义一个原型和基类相同的方法,称派生类重写了此方法. id代表任意类型, 在程序运行期间才会确定id所代表的类型. 使用类方法创建的对象会被自动放入“自动释放池”中,所以不需要再手动release. 派生类中扩展实例变量时,不能与基类部分实例变量同名.

OC第七天笔记2016年03月21日(周一)P.M

1. 使用NsCompare 或者isEqualToNumber来实现NsNumber对象的比较. NsCompare:比较大小关系 isEqualToNumber:是否相等 长度:[str length] 查找子串: NSRange rr = [str rangeOfString:@”ll”]; If(rr.location == NSNotFound){ NSLog(@”ll is not in str ”); } else { NSLog(@”ll is in str”);}

C++第十四天笔记2016年03月10日(周四) A.M

1. 线性结构:链表和数组 数组:可以访问任意位置的元素.添加删除操作相对麻烦. 链表:添加删除效率相对较高.只能从第一个元素开始访问. 访问较多:数组.添加删除较多:链表. 数组:元素类型 数组名[元素个数]; 2.  如何创建链表: 链表:链表中的每一个元素称为节点. 节点:数据域(存储数据)和指针域(存储下一节点的地址编号). 3.  双向链表:数据域和指针域(包含两个,其中一个指向下一个节点,另外一个指向上一个节点) 4.  头结点:链表中的第一个节点 空链表:链表中无任何节点. 1 #

C语言第九天笔记2016年01月25日(周一)P.M

1. 结构体 成员如果是char* name;能否使用gets.scanf.strcpy取决于name是否“指向”一块可以盛放字符串的空间,成员是数组,数组名不可以做左值. COMPUTER* p; p=&c; p->brandó(*p).brand .成员访问运算符 //结构体变量名.成员:c.brand; ->指向运算符:指针变量名->成员; //访问指针所“指向”的结构体变量的成员 2. 宏定义 基本格式:#define 宏的名字 宏替换内容 3. 预处理命令 #if 0

C++第十二天笔记2016年03月04日(周五) A.M

1.    多重继承 在多继承中,如果派生类的多个基类出现重名函数,为了避免出现歧义,则可以在派生类中重写这些重名函数. 2.    菱形继承问题,成员冗余(成员变量的冗余,无问题.成员函数的冗余,可能会出现问题).函数调用出现歧义. 使用虚继承解决菱形继承问题. 3.    模板 函数模板:有类型参数的函数. 如何定义函数模板: 1 template <typename T> 2 void print(T,_t) 3 { 4 cout<< _t << endl; 5

iPhone 第二天笔记2016年03月30日(周三)A.M 秒表计时、登录验证+页面跳转

1. 按钮代码实现: 1 <font size="3">-(void)initbuttonregister 2 { 3 UIButton* btn = [UIButton buttonWithType:UIButtonTypeCustom]; 4 //设置frame 5 [btn setFrame:CGRectMake(200, 230, 80, 44)]; 6 //设置title 7 [btn setTitle:@"注册" forState:UICon