基礎(chǔ)類型數(shù)據(jù)表
源碼編譯:
1.預(yù)編譯;為編譯代碼做準(zhǔn)備,比如移除注釋,重排某些指令,使其更高校.
2.編譯;將源代碼轉(zhuǎn)變成目標(biāo)文件,擴(kuò)展名為.o
.
3.鏈接;將上一步生成的目標(biāo)文件連接起來(lái),生成可執(zhí)行文件,庫(kù)和框架也會(huì)被鏈接到可執(zhí)行文件中.
幾個(gè)關(guān)鍵字的區(qū)別 static, register, extern, const
static: 整個(gè)應(yīng)用運(yùn)行期間只分配一次內(nèi)存
register: 它修飾的變量會(huì)被經(jīng)常訪問(wèn),多用于寄存器中
extern: 它修飾的變量引用了另外一個(gè)變量.
cons: 它修飾的變量是只讀的,在初始化之后便不能修改.
結(jié)構(gòu)體定義格式: typedef 變量定義 新類型名。
#import "ViewController.h"
typedef struct {
float x;
float y;
}YPPoint;
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
YPPoint p;
p.x = 1.98;
p.y = 2.36;
}
枚舉的使用
#import "ViewController.h"
enum YPEnum
{
MsgType1 = 199,
MsgType2,
};
@interface ViewController ()
@property(assign,nonatomic) enum YPEnum myEnum;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.myEnum = MsgType1;
}
指針
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
int x = 5;
int *y = &x;
NSLog(@"%p %p %p",x,&x,y);
}
打印結(jié)果:
0x5 0x7ffeeee029fc 0x7ffeeee029fc
可以看出,變量x存放的是常量5, 而變量x的內(nèi)存地址是0x7ffeeee029fc,
而y是指向整形的指針,它存儲(chǔ)的是x的地址
void myFunction(int a, int *b)
{
a = 20;
*b = 28;//反引用指針以訪問(wèn)原始值
NSLog(@"%d %d",a ,*b);
}
KVC的一些騷操作
NSArray *array = @[@1, @2, @3, @4, @10];
NSNumber *sum = [array valueForKeyPath:@"@sum.self"];
NSNumber *avg = [array valueForKeyPath:@"@avg.self"];
NSNumber *max = [array valueForKeyPath:@"@max.self"];
NSArray *array1 = @[@"name", @"w", @"aa", @"ZXPing"];
NSLog(@"%@", [array1 valueForKeyPath:@"uppercaseString"]);
NSArray *threeDimensionalArray = @[
@[
@[ @"Peter", @"Paul", @"Mary" ], @[ @"Joe", @"Jane" ]
],
@[
@[ @"Alice", @"Bob" ]
]
];
NSArray *flattenedArray = [threeDimensionalArray valueForKeyPath: @"@unionOfArrays.self.@unionOfArrays.self"];
為什么OC中沒(méi)有多繼承
B,C
類的父類都繼承了A
;B,C
類中都實(shí)現(xiàn)了A
類的-(void)method
方法,假設(shè)D
類多繼承B,C
類,當(dāng)D
類調(diào)用-(void) method
方法時(shí),就會(huì)出現(xiàn)二義性的問(wèn)題,因?yàn)?code>B,C類都有可能實(shí)現(xiàn)了-(void) method
方法.
多繼承導(dǎo)致的二義性問(wèn)題
協(xié)議擴(kuò)展
//NetWorkHelperDelegate.h
@protocol NetWorkHelperDelegate <NSObject>
@required
- (void)configHelperWithID:(NSString *)userId;
@end
//NetWorkHelperDelegate.h
@protocol NetWorkClientDelegate <NetWorkHelperDelegate>
@optional
- (void)checkNetWork;
@end
//ViewController.m 這樣在只遵守 NetWorkClientDelegate 的情況下就可以實(shí)現(xiàn)兩個(gè)代理的調(diào)用
@interface ViewController ()<NetWorkClientDelegate>
@end
@implementation ViewController
#pragma mark - NetWorkClientDelegate
- (void)configHelperWithID:(NSString *)userId
{
}
- (void)checkNetWork
{
}
關(guān)聯(lián)對(duì)象
關(guān)聯(lián)策略說(shuō)明
預(yù)編譯指令
image.png