ios基础-3-4类属性

创建属性在.h文件中

@property来指定属性,内部限定涉及:多线程、内存分配释放

  • 线程原子性
    • nonatomic
      • 不涉及多线程间数据交互,一般使用非原子性
    • atomic
      • 多线程保护机制,保证其原子性,速度慢
  • assign
    • 基础数据类型简单复制:int, float, double, BOOL…
  • copy
    • NSString
      • 建立一个索引计数为1的对象,释放旧的对象
  • retain
    • 除了NSString之外的
      • copy区别,copy复制一个字符串之后,地址发生了变化,
        同时内容是相同的,如果执行retain则旧的对象不发生变化,简单来说:
        copy内容进行操作,retain是指针的拷贝,之后内存管理ARC详细介绍
  • strong weak
    • UI 控件经常使用
    • 强持有,交叉引用!!!不懂哇

ios基础-3-3属性get|set

封装,内部变量的细节封装起来,暴露外部接口使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
//
// main.m
// 3-3属性set|get
//
// Created by wanggang on 2017/7/26.
// Copyright © 2017年 hackingangle. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *person = [[Person alloc] init];
person.age = -29;
NSLog(@"%d", person.age);
}
return 0;
}
//
// Person.h
// 3-3属性set|get
//
// Created by wanggang on 2017/7/26.
// Copyright © 2017年 hackingangle. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Person : NSObject {
NSString *name;
int age;
}
-(void)setAge:(int)newAge;
-(int)age;
@end
//
// Person.m
// 3-3属性set|get
//
// Created by wanggang on 2017/7/26.
// Copyright © 2017年 hackingangle. All rights reserved.
//
#import "Person.h"
@implementation Person
-(void)setAge:(int)newAge{
if (newAge < 0) {
newAge = 1;
}
age = newAge;
}
-(int)age {
if (age > 0) {
NSLog(@"茁壮成长");
}
return age;
}
@end

ios基础-3-2-构造方法&实例方法&类方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
//
// main.m
// 3-2构造方法
//
// Created by wanggang on 2017/7/26.
// Copyright © 2017年 hackingangle. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// Person *person = [[Person alloc] init];
Person *person = [[Person alloc] initWithName:@"hackingangle" age:27];
NSLog(@"%@ %d", person.name, person.age);
// 实例方法
[person say];
// 类方法
[Person work];
}
return 0;
}
//
// Person.h
// 3-2构造方法
//
// Created by wanggang on 2017/7/26.
// Copyright © 2017年 hackingangle. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property(nonatomic, assign) int age;
@property(nonatomic, copy)NSString *name;
-(id) initWithName:(NSString*)name age:(int)age;
-(void) say;
+(void) work;
@end
//
// Person.m
// 3-2构造方法
//
// Created by wanggang on 2017/7/26.
// Copyright © 2017年 hackingangle. All rights reserved.
//
#import "Person.h"
@implementation Person
-(id)init {
self = [super init];
if (self) {
self.age = 18;
}
return self;
}
-(id)initWithName:(NSString*)name age:(int)age {
self = [super init];
if (self) {
self.name = name;
self.age = age;
}
return self;
}
-(void) say {
NSLog(@"say");
}
+(void) work {
NSLog(@"work");
}
@end

ios基础-3-1-类实例化

概念

类是抽象,实例化是抽象的实现

代码

创建一个类-Person(人)

  • 成员属性

    • name
      • 姓名
      • 字符串
      • NSString
    • age
      • 年龄
      • 整型
      • int
    • male
      • 性别
      • 布尔
      • BOOL
  • 成员方法

    • hi
      • 表达您好

Person.h

Person.h 负责创建成员变量,声明成员方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//
// Person.h
// 3面向对象-类实例化
//
// Created by wanggang on 2017/7/26.
// Copyright © 2017年 hackingangle. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property(nonatomic, copy) NSString *name;
@property(nonatomic, assign) int age;
@property(nonatomic, assign) BOOL male;
- (void) hi;
@end

Person.m

Person.m负责创建成员方法的具体实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//
// Person.m
// 3面向对象-类实例化
//
// Created by wanggang on 2017/7/26.
// Copyright © 2017年 hackingangle. All rights reserved.
//
#import "Person.h"
@implementation Person
- (void) hi {
NSLog(@"hi");
}
@end

Person使用

.来设置和获取成员属性
[]来调用成员方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//
// main.m
// 3面向对象-类实例化
//
// Created by wanggang on 2017/7/26.
// Copyright © 2017年 hackingangle. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *person = [[Person alloc] init];
person.name = @"hackingangle";
person.age = 28;
person.male = true;
[person hi];
NSLog(@"%@ %d %d", person.name, person.age, person.male);
}
return 0;
}

执行结果

1
2
3
2017-07-26 13:05:49.282387+0800 3面向对象-类实例化[19296:1426503] hi
2017-07-26 13:05:49.282997+0800 3面向对象-类实例化[19296:1426503] hackingangle 28 1
Program ended with exit code: 0

ios基础-8-宏

  • 定义变量
  • 定义运算
  • 定义方法

编译参数

  • if
  • endif
  • ifdef
  • TARGET_OS_MAC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//
// main.m
// 8宏定义编译
//
// Created by wanggang on 2017/7/25.
// Copyright © 2017年 hackingangle. All rights reserved.
//
#import <Foundation/Foundation.h>
#define PI 3.141592
#define SUM(x,y) x+y
#define MYLOG(x) NSLog(@"My log is %f", x)
int main(int argc, const char * argv[]) {
@autoreleasepool {
MYLOG(PI);
MYLOG(SUM(1.1,2));
#if TARGET_OS_MAC
NSLog(@"mac");
#endif
#define DEBUG_MODE 0
#if DEBUG_MODE
NSLog(@"debug");
#else
NSLog(@"no debug");
#endif
#ifdef DEBUG_MODE
NSLog(@"define debug");
#endif
// 系统定义的debug模式
#ifdef DEBUG
NSLog(@"系统定义debug模式");
#endif
}
return 0;
}

ios基础-7-函数

函数

如果不在main前面声明、创建,需要声明签名,如:hello()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//
// main.m
// 7函数
//
// Created by wanggang on 2017/7/25.
// Copyright © 2017年 hackingangle. All rights reserved.
//
#import <Foundation/Foundation.h>
void hello();
int calculate(int a, int b, char c) {
int ret = 0;
switch(c) {
case '+':
ret = a + b;
break;
case '-':
ret = a - b;
break;
case '*':
ret = a * b;
break;
case '/':
ret = a / b;
break;
default:
break;
}
return ret;
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
hello();
NSLog(@"%d", calculate(2, 3, '+'));
NSLog(@"%d", calculate(2, 3, '-'));
NSLog(@"%d", calculate(2, 3, '*'));
NSLog(@"%d", calculate(2, 3, '/'));
}
return 0;
}
void hello() {
NSLog(@"hello world");
}

ios基础-6-循环

循环

  • while (XX)
  • do while
    • 至少执行一次,即使条件不满足,很少使用
  • for
    • 最重要的循环
    • 快速枚举
  • break|continue
    • break
      • 跳出所有循环
    • continue
      • 跳出本次循环
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//
// main.m
// 6循环
//
// Created by wanggang on 2017/7/25.
// Copyright © 2017年 hackingangle. All rights reserved.
//
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
int count = 2;
while (count > 0) {
count--;
NSLog(@"hi in while");
}
// 至少执行一次
do {
count--;
NSLog(@"hi in do while");
} while (count >0);
// 最重要的循环
for (int count = 2; count > 0; count--) {
if (count == 2) {
NSLog(@"break all for");
break;
}
NSLog(@"hi in for");
}
}
return 0;
}

ios基础-5-选择

  • if
    • if else
    • … else if …
  • switch
    • 跟C用法相同
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//
// main.m
// 5选择if
//
// Created by wanggang on 2017/7/24.
// Copyright © 2017年 hackingangle. All rights reserved.
//
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
int a = 10;
// if
if (a > 1) {
NSLog(@"a > 1");
}
// if-else
if (a > 10) {
NSLog(@"a > 10");
} else {
NSLog(@"a < 10");
}
// 嵌套
if (a != 0) {
if (a > 0) {
NSLog(@"a > 0");
} else {
NSLog(@"a < 0");
}
}
// if-else if-else
if (a < 0) {
NSLog(@"a < 0");
} else if (a > 0) {
NSLog(@"a > 0");
} else {
NSLog(@"a = 0");
}
// break必不可少
int flag = 2;
switch (flag) {
case 10:
NSLog(@"10");
break;
case 2:
NSLog(@"2");
break;
default:
NSLog(@"default");
break;
}
}
return 0;
}

ios基础-4-运算符

  1. 所有的数字的计算都离不开

    • +
    • -
    • *
    • /
  2. 存在一些逻辑上的关系,比如且,或,非

    • &&
    • ||
    • !
  3. 取模为一种经常使用的行为

    • 1%10
      • =1
  4. 赋值的时候进行计算

    • +=
  5. 自增、自减运算

    • ++
    • --
  6. 位运算

    • a&1
      • =1
    • a<<1
      • *2
    • a>>1
      • /2
  7. 三目

    • (a>b)?1:0

shell命令查看linux-tcp

tcp

查看timeout数量

1
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

显示结果

1
2
3
4
5
SYN_RECV 1
CLOSE_WAIT 1
ESTABLISHED 122
FIN_WAIT2 3
TIME_WAIT 55745

,