2019-05-13 16:04:05 qq_43361450 阅读数 92
  • 172集通俗易懂的C语言从入门到项目实战教程

    1) 本套课程针对高校大学生系统学习C语言而录制,从0基础入门讲起,循序渐进,通俗易懂,同时适用于计算机系及非计算机系的同学。通过学习可以帮助大家掌握C语言本质,轻松面对C语言全国二级考试,并达到能独立完成中型C项目、C游戏的水平; 2) 多数高校都开设了C语言课程,网上C语言课程也很多,但普遍存在两个问题: (1) 授课方式单一,大多是照着代码念一遍, 对刚刚接触编程的同学来说,感觉晦涩难懂 (2) 授课内容过度注重语法,没有项目实战支撑,造成课程枯燥无趣。本课程针对上述问题进行了改进 (1) 授课方式采用语法讲解+内存布局示意图+项目的方式,让课程生动有趣好理解 (2) 系统全面的讲解了C语言的核心技术点,还配套录制了《全国计算机二级C语言真题精讲》,让学员在掌握C语言编程的同时,还能轻松面对二级考试;3) 课程详细内容: 常量-变量、分支语句、循环语句、操作符和表达式、函数(库函数、自定义函数、递归调用 )、数组(一维数 组、二维数组、数组作为函数参数、指针数组)、指针(指针和指针类型、二级指针和多级指针、指针表达式解析、指针运算、数 组指针、函数指针、回调函数)、调试技巧、程序环境和预处理(翻译环境、运行环境、预定义符号、#define和#undef、宏和函 数、条件编译、文件包含)、 数据在内存中的存储、内存块分配、static、字符函数和字符串函数、自定义类型(结构体、枚举 、联合)、动态内存管理、文件操作(i/o常量、i/o函数、流)。

    33 人正在学习 去看看 张长志
        
#define Start_X 5.0f // 第一个按钮的X坐标
#define Start_Y 5.0f // 第一个按钮的Y坐标
#define Width_Space 5.0f // 2个按钮之间的横间距
#define Height_Space 5.0f // 竖间距
#define Button_Height 50.0f // 高
#define Button_Width 175.0f // 宽
        
        for (int i=0; i<self.arrcount.count; i++) {
        
           
            
                self.imgAo=[[UIImageView alloc]init];
                self.imgAo.backgroundColor=
            [UIColor colorWithRed:((float)arc4random_uniform(256) / 255.0) green:((float)arc4random_uniform(256) / 255.0) blue:((float)arc4random_uniform(256) / 255.0) alpha:1.0];
            NSInteger index = i % 2;
            NSInteger page = i / 2;
            
            self->_imgAo.frame = CGRectMake(index * (Button_Width + Width_Space) + Start_X, page  * (Button_Height + Height_Space)+Start_Y, 30,30);
            self.imgAo.image=[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[self.arrcount[i]objectForKey:@"linkLogoPrefix"]]]];

            [self->_bjView addSubview:self.imgAo];
            
            self.AS=[[UIButton alloc]init];
            self.AS.frame = CGRectMake(index * (Button_Width + Width_Space) + Start_X+40, page  * (Button_Height + Height_Space)+Start_Y, 100,30);
            [self.AS setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            self.AS.tag=i;
            [self.AS setTitle:[self.arrcount[i]objectForKey:@"linkname"] forState:UIControlStateNormal];
            [self.AS addTarget:self action:@selector(mapBtnClick:) forControlEvents:UIControlEventTouchUpInside];
           
            self.AS.titleLabel.font=[UIFont systemFontOfSize:12];
           
            self.AS.backgroundColor=[UIColor yellowColor];

            [self->_bjView addSubview:self.AS];

            
          
        }



//关于for循环出来的btn 今天跳转传值问题
@property (nonatomic,strong)NSArray *arrMyData;

self.arrMyData =json[@"data"];
as.title= [[self.arrMyData objectAtIndex:btn.tag] objectForKey:@"linkname"];
2016-09-27 19:40:01 liaohongwei 阅读数 781
  • 172集通俗易懂的C语言从入门到项目实战教程

    1) 本套课程针对高校大学生系统学习C语言而录制,从0基础入门讲起,循序渐进,通俗易懂,同时适用于计算机系及非计算机系的同学。通过学习可以帮助大家掌握C语言本质,轻松面对C语言全国二级考试,并达到能独立完成中型C项目、C游戏的水平; 2) 多数高校都开设了C语言课程,网上C语言课程也很多,但普遍存在两个问题: (1) 授课方式单一,大多是照着代码念一遍, 对刚刚接触编程的同学来说,感觉晦涩难懂 (2) 授课内容过度注重语法,没有项目实战支撑,造成课程枯燥无趣。本课程针对上述问题进行了改进 (1) 授课方式采用语法讲解+内存布局示意图+项目的方式,让课程生动有趣好理解 (2) 系统全面的讲解了C语言的核心技术点,还配套录制了《全国计算机二级C语言真题精讲》,让学员在掌握C语言编程的同时,还能轻松面对二级考试;3) 课程详细内容: 常量-变量、分支语句、循环语句、操作符和表达式、函数(库函数、自定义函数、递归调用 )、数组(一维数 组、二维数组、数组作为函数参数、指针数组)、指针(指针和指针类型、二级指针和多级指针、指针表达式解析、指针运算、数 组指针、函数指针、回调函数)、调试技巧、程序环境和预处理(翻译环境、运行环境、预定义符号、#define和#undef、宏和函 数、条件编译、文件包含)、 数据在内存中的存储、内存块分配、static、字符函数和字符串函数、自定义类型(结构体、枚举 、联合)、动态内存管理、文件操作(i/o常量、i/o函数、流)。

    33 人正在学习 去看看 张长志

RAC() 可以将Signal发出事件的值赋值给某个对象的某个属性,其参数为对象名和属性名,平时用到的宏如:

RAC(TARGET, [KEYPATH, [NIL_VALUE]])

版本:ReactiveCocoa-2.3.1

RAC宏展开解析


以下通过分析宏顺序展开分析依次得到的结果,并得到最终代码

【这个宏封装的牛逼,愣是看了好久!!!】,详细如下:

一. RAC(TARGET, 2)

**  PA: RAC_(TARGET,2,nil)
**  PB: RAC_(TARGET,2)
  1. metamacro_if_eq(1,metamacro_argcount(TARGET, 2)) (PA) (PB)
  2. metamacro_if_eq(1,metamacro_at(20,TARGET, 2 , 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)) (PA) (PB)
  3. metamacro_if_eq(1,metamacro_concat(metamacro_at,20)(TARGET, 2 , 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)) (PA) (PB)
  4. metamacro_if_eq(1,metamacro_at20(TARGET, 2 , 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)) (PA) (PB)
  5. metamacro_if_eq(1,metamacro_head(2, 1)) (PA) (PB)
  6. metamacro_if_eq(1,metamacro_head_(2, 1, 0)) (PA) (PB)
  7. metamacro_if_eq(1,2) (PA) (PB)#所以metamacro_argcount就是参数的个数
  8. metamacro_concat(metamacro_if_eq,1)(2) (PA) (PB)
  9. metamacro_if_eq1(2) (PA) (PB)
  10. metamacro_if_eq0(metamacro_dec(2) (PA) (PB)
  11. metamacro_if_eq0(metamacro_at(2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19)) (PA) (PB)
  12. metamacro_if_eq0(metamacro_concat(metamacro_at,2)(-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19)) (PA) (PB)
  13. metamacro_if_eq0(metamacro_at2(-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19)) (PA) (PB)
  14. metamacro_if_eq0(metamacro_head(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19)) (PA) (PB)
  15. metamacro_if_eq0(1) (PA) (PB)
  16. metamacro_concat(metamacro_if_eq0_,1) (PA) (PB)
  17. metamacro_if_eq0_1 (PA) (PB)
  18. metamacro_expand_ (PA) (PB)#PA被metamacro_expand_带走了,就剩下PB
  19. PB
=>    RAC_(TARGET,2)
=>[[RACSubscriptingAssignmentTrampoline alloc] initWithTarget:(TARGET) nilValue:(NILVALUE)][@keypath(TARGET, 2)]

二. RAC(TARGET)

**  PA: (RAC_(TARGET, __VA_ARGS__, nil))
**  PB: (RAC_(TARGET, __VA_ARGS__))
  1. metamacro_if_eq(1,metamacro_argcount(TARGET)) (PA) (PB)
  2. metamacro_if_eq(1,metamacro_at20(TARGET, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)) (PA) (PB)
  3. metamacro_if_eq(1,metamacro_head(1)) (PA) (PB)
  4. metamacro_if_eq1(1) (PA) (PB)
  5. metamacro_if_eq0(metamacro_dec(1)) (PA) (PB)
  6. metamacro_if_eq0(metamacro_at1(-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19)) (PA) (PB)
  7. metamacro_if_eq0(metamacro_head(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19)) (PA) (PB)
  8. metamacro_if_eq0(0) (PA) (PB)
  9. metamacro_if_eq0_0 (PA) (PB)
  10. (PA) metamacro_consume_ (PB)
  11. PA
=>RAC_(TARGET, __VA_ARGS__, nil)

三. RAC(TARGET, 2,3,4)

有了以上基础,这里简要中介展开过程,直接讲重点!
**  PA: RAC_(TARGET,__VA_ARGS__,nil)
**  PB: RAC_(TARGET,__VA_ARGS__)
  1. metamacro_if_eq(1,4) (PA) (PB)#所以参数的个数4
  2. metamacro_if_eq0_3 (PA) (PB)#metamacro_if_eq0_1~metamacro_if_eq0_20定义一样,所以还是PB
  3.         PB
=>RAC_(TARGET,__VA_ARGS__)


总结

  • 如果只有1个参数的,就调用RAC_(TARGET, __VA_ARGS__, nil)
  • 如果有多个参数的,就调用RAC_(TARGET, __VA_ARGS__)
具体如下:
#define RAC_(TARGET, KEYPATH, NILVALUE) \
    [[RACSubscriptingAssignmentTrampoline alloc] initWithTarget:(TARGET) nilValue:(NILVALUE)][@keypath(TARGET, KEYPATH)]



========================================

以上分析过程中参考的宏定义

========================================

#define metamacro_concat_(A, B) A ## B  
#define metamacro_concat(A, B) \
        metamacro_concat_(A, B)
#define metamacro_if_eq(A, B) \
        metamacro_concat(metamacro_if_eq, A)(B)
#define metamacro_at(N, ...) \
        metamacro_concat(metamacro_at, N)(__VA_ARGS__)
#define metamacro_argcount(...) \
        metamacro_at(20, __VA_ARGS__, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
#define RAC_(TARGET, KEYPATH, NILVALUE) \
    [[RACSubscriptingAssignmentTrampoline alloc] initWithTarget:(TARGET) nilValue:(NILVALUE)][@keypath(TARGET, KEYPATH)]
#define RAC(TARGET, ...) \
    metamacro_if_eq(1, metamacro_argcount(__VA_ARGS__)) \
        (RAC_(TARGET, __VA_ARGS__, nil)) \
        (RAC_(TARGET, __VA_ARGS__))
#define metamacro_head_(FIRST, ...) FIRST
#define metamacro_head(...) \
        metamacro_head_(__VA_ARGS__, 0)
#define metamacro_at1(_0, ...) metamacro_head(__VA_ARGS__)
#define metamacro_at2(_0, _1, ...) metamacro_head(__VA_ARGS__)
#define metamacro_at20(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, ...) metamacro_head(__VA_ARGS__)
#define metamacro_if_eq0(VALUE) \
    metamacro_concat(metamacro_if_eq0_, VALUE)
#define metamacro_dec(VAL) \
        metamacro_at(VAL, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19)
#define metamacro_if_eq1(VALUE) metamacro_if_eq0(metamacro_dec(VALUE))
#define metamacro_expand_(...) __VA_ARGS__
#define metamacro_if_eq0_1(...) metamacro_expand_
#define metamacro_consume_(...)
#define metamacro_if_eq0_0(...) __VA_ARGS__ metamacro_consume_


2016-09-06 11:15:20 liuhaiyanga 阅读数 651
  • 172集通俗易懂的C语言从入门到项目实战教程

    1) 本套课程针对高校大学生系统学习C语言而录制,从0基础入门讲起,循序渐进,通俗易懂,同时适用于计算机系及非计算机系的同学。通过学习可以帮助大家掌握C语言本质,轻松面对C语言全国二级考试,并达到能独立完成中型C项目、C游戏的水平; 2) 多数高校都开设了C语言课程,网上C语言课程也很多,但普遍存在两个问题: (1) 授课方式单一,大多是照着代码念一遍, 对刚刚接触编程的同学来说,感觉晦涩难懂 (2) 授课内容过度注重语法,没有项目实战支撑,造成课程枯燥无趣。本课程针对上述问题进行了改进 (1) 授课方式采用语法讲解+内存布局示意图+项目的方式,让课程生动有趣好理解 (2) 系统全面的讲解了C语言的核心技术点,还配套录制了《全国计算机二级C语言真题精讲》,让学员在掌握C语言编程的同时,还能轻松面对二级考试;3) 课程详细内容: 常量-变量、分支语句、循环语句、操作符和表达式、函数(库函数、自定义函数、递归调用 )、数组(一维数 组、二维数组、数组作为函数参数、指针数组)、指针(指针和指针类型、二级指针和多级指针、指针表达式解析、指针运算、数 组指针、函数指针、回调函数)、调试技巧、程序环境和预处理(翻译环境、运行环境、预定义符号、#define和#undef、宏和函 数、条件编译、文件包含)、 数据在内存中的存储、内存块分配、static、字符函数和字符串函数、自定义类型(结构体、枚举 、联合)、动态内存管理、文件操作(i/o常量、i/o函数、流)。

    33 人正在学习 去看看 张长志

1.

// 需要设置按钮的image和backgroundImage,建议先把按钮类型改为custom,才能保证设置成功
// 属性名不能以new开头
// 只有在init开头的构造方法中,才允许对self进行赋值

#define HMGlobalQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
#define HMMainQueue dispatch_get_main_queue()

#import "HMViewController.h"

@interface HMViewController ()
@property (weak, nonatomic) IBOutlet UIButton *button;

@property (weak, nonatomic) IBOutlet UIImageView *newImageView;
@end

@implementation HMViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self newImageView];


//    NSObject *obj = [NSObject new];
//    
//    [[NSObject alloc] init];

    // Do any additional setup after loading the view, typically from a nib.
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    dispatch_async(HMGlobalQueue, ^{
        NSLog(@"donwload---%@", [NSThread currentThread]);
        // 1.子线程下载图片
        NSURL *url = [NSURL URLWithString:@"http://d.hiphotos.baidu.com/image/pic/item/37d3d539b6003af3290eaf5d362ac65c1038b652.jpg"];
        NSData *data = [NSData dataWithContentsOfURL:url];
        UIImage *image = [UIImage imageWithData:data];

        // 2.回到主线程设置图片
        dispatch_async(HMMainQueue, ^{
            NSLog(@"setting---%@ %@", [NSThread currentThread], image);
            [self.button setImage:image forState:UIControlStateNormal];
        });
    });
}

@end
2015-08-28 22:35:12 qq_26544491 阅读数 748
  • 172集通俗易懂的C语言从入门到项目实战教程

    1) 本套课程针对高校大学生系统学习C语言而录制,从0基础入门讲起,循序渐进,通俗易懂,同时适用于计算机系及非计算机系的同学。通过学习可以帮助大家掌握C语言本质,轻松面对C语言全国二级考试,并达到能独立完成中型C项目、C游戏的水平; 2) 多数高校都开设了C语言课程,网上C语言课程也很多,但普遍存在两个问题: (1) 授课方式单一,大多是照着代码念一遍, 对刚刚接触编程的同学来说,感觉晦涩难懂 (2) 授课内容过度注重语法,没有项目实战支撑,造成课程枯燥无趣。本课程针对上述问题进行了改进 (1) 授课方式采用语法讲解+内存布局示意图+项目的方式,让课程生动有趣好理解 (2) 系统全面的讲解了C语言的核心技术点,还配套录制了《全国计算机二级C语言真题精讲》,让学员在掌握C语言编程的同时,还能轻松面对二级考试;3) 课程详细内容: 常量-变量、分支语句、循环语句、操作符和表达式、函数(库函数、自定义函数、递归调用 )、数组(一维数 组、二维数组、数组作为函数参数、指针数组)、指针(指针和指针类型、二级指针和多级指针、指针表达式解析、指针运算、数 组指针、函数指针、回调函数)、调试技巧、程序环境和预处理(翻译环境、运行环境、预定义符号、#define和#undef、宏和函 数、条件编译、文件包含)、 数据在内存中的存储、内存块分配、static、字符函数和字符串函数、自定义类型(结构体、枚举 、联合)、动态内存管理、文件操作(i/o常量、i/o函数、流)。

    33 人正在学习 去看看 张长志

nil

定义一个实例为空, 指向oc中对象的空指针.
NSString *someString = nil;
NSURL *someURL = nil;
当对某个对象release 的同时最好把他们赋值为nil,这样可以确保安全性,如果不赋值nil,可能导致程序崩溃.

NULL

NULL可以用在C语言的各种指针上
#define __DARWIN_NULL
#define__DARWIN_NULLConstants
int *pointerToInt = NULL;
char *pointerToChar = NULL;
struct TreeNode *rootNode = NULL;
在Objective-C里,nil对象被设计来跟NULL空指针关联的。他们的区别就是nil是一个对象,而NULL只是一个值。而且我们对于nil调用方法,不会产生crash或者抛出异常。

Nil

定义一个空的类
Class someClass = Nil;
Class anotherClass = [NSString class];

NSNull

集合对象无法包含nil作为其具体值,如NSArray、NSSet和NSDictionary。相应地,nil值用一个特定的对象NSNull来表示。NSNull提供了一个单一实例用于表示对象属性中的的nil值。默认的实现方法中,dictionaryWithValuesForKeys:和setValuesForKeysWithDictionary:自动地将NSNull和nil相互转换,因此您的对象不需要进行NSNull的测试操作。

2016-03-09 16:41:21 u010244140 阅读数 7313
  • 172集通俗易懂的C语言从入门到项目实战教程

    1) 本套课程针对高校大学生系统学习C语言而录制,从0基础入门讲起,循序渐进,通俗易懂,同时适用于计算机系及非计算机系的同学。通过学习可以帮助大家掌握C语言本质,轻松面对C语言全国二级考试,并达到能独立完成中型C项目、C游戏的水平; 2) 多数高校都开设了C语言课程,网上C语言课程也很多,但普遍存在两个问题: (1) 授课方式单一,大多是照着代码念一遍, 对刚刚接触编程的同学来说,感觉晦涩难懂 (2) 授课内容过度注重语法,没有项目实战支撑,造成课程枯燥无趣。本课程针对上述问题进行了改进 (1) 授课方式采用语法讲解+内存布局示意图+项目的方式,让课程生动有趣好理解 (2) 系统全面的讲解了C语言的核心技术点,还配套录制了《全国计算机二级C语言真题精讲》,让学员在掌握C语言编程的同时,还能轻松面对二级考试;3) 课程详细内容: 常量-变量、分支语句、循环语句、操作符和表达式、函数(库函数、自定义函数、递归调用 )、数组(一维数 组、二维数组、数组作为函数参数、指针数组)、指针(指针和指针类型、二级指针和多级指针、指针表达式解析、指针运算、数 组指针、函数指针、回调函数)、调试技巧、程序环境和预处理(翻译环境、运行环境、预定义符号、#define和#undef、宏和函 数、条件编译、文件包含)、 数据在内存中的存储、内存块分配、static、字符函数和字符串函数、自定义类型(结构体、枚举 、联合)、动态内存管理、文件操作(i/o常量、i/o函数、流)。

    33 人正在学习 去看看 张长志

1、新建一个头文件,如下代码:

#ifndef Header_h

#define Header_h


struct MyStruce{

    char *name;//(指针形式)

    char *address;

    CGFloat age;

};

typedef struct MyStruce MyStruce;


CG_INLINE MyStruce

MyStruceMake(char *name, char *address, CGFloat age)

{

    MyStruce myStruce;

    myStruce.name = name;

    myStruce.address = address;

    myStruce.age = age;

    return myStruce;

}

#endif /* Header_h */


2、使用

    MyStruce myStruce = {"name","address",12};

    NSString *name = [NSString stringWithFormat:@"%s",myStruce.name];

    NSLog(@"%s   %@",myStruce.name,name);

    


    MyStruce struce = MyStruceMake("name", "address", 123);

   //结构体转换成对象

    NSValue *value = [NSValue valueWithBytes:&struce objCType:@encode(MyStruce)];

    

    NSMutableArray *array = [NSMutableArray array];

    [array addObject:value];

    

    MyStruce struceBack;

    [array[0] getValue:&struceBack];

    NSLog(@"struceBack.name = %s",struceBack.name);


3、另附(NSString与char的转换方法):

    NSString *string_content = @"sssssss";

    const char *char_content = [string_content cStringUsingEncoding:NSASCIIStringEncoding];

    

    const char *chars = [string_content cStringUsingEncoding:NSASCIIStringEncoding];

    

    NSLog(@"%s",char_content);

    

    string_content = [[NSString alloc] initWithCString:char_content encoding:NSASCIIStringEncoding];

    

    NSString *string =[[NSString alloc] initWithCString:chars encoding:NSASCIIStringEncoding];

    

    NSLog(@"%@",string_content);



没有更多推荐了,返回首页