oc中一些注意的语法
2015-11-12 19:35
344 查看
oc中是有goto语句的,goto语句后面跟着一个标签,表示后面将会跳转到哪里,标签的定义是字符串后面加一个冒号
例如 start:
由于goto语句打破了常规的循环等,所以建议尽量不要使用
定义快必须以^ 开始,
定义块的返回值类型可以省略,而且经常会省略声明块的返回值类型
定义块无需指定名字
如果块没有参数 此时参数部分的括号不可省略,但内部可以留空,通常建议使用void为占位符
如果程序需要多次使用该块,则可以将其赋给块变量,
函数形参可变的方法 只需要在后加上...
为@private @package @public @protected protected就是子类可以进行访问 package就是生成的同一镜像,也就是在同一个字目录下的文件可以进行访问,而子类就不允许访问
@property 和@synthesize 前者是自动生成get和set方法,后者是改变生成的变量名
@synthesize window = _window;表示生成的变量名是_window,而不是window
atomic 是指在多线程的情况下,避免对内部的成员变量进行修改,因为大部分的情况下都是但线程,因此使用nonatomic
copy是指当调用setter方法的时候,先将变量烤给一个副本,再赋值给原变量
strong和weak的区别 前者是当赋值给对象的时候,不会自动的回收,一个是会自动的回收
kvc 通过键值对来进行赋值
还有一种是valueforKey
例如 start:
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... int i = 0; start: NSLog(@"%d",i); if(i < 10) { goto start; } } return 0; }goto语句可以用于突破多重循环
由于goto语句打破了常规的循环等,所以建议尽量不要使用
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... start: for(int i = 0;i < 5;i++) { for(int j = 0;j < 6;j++) { NSLog(@"%s","cao"); if(j > 1) goto start; } } } return 0; }块的基本使用
定义快必须以^ 开始,
定义块的返回值类型可以省略,而且经常会省略声明块的返回值类型
定义块无需指定名字
如果块没有参数 此时参数部分的括号不可省略,但内部可以留空,通常建议使用void为占位符
如果程序需要多次使用该块,则可以将其赋给块变量,
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... //定义不带参数,无返回值的块 void (^printStr)(void) = ^(void){ NSLog(@"%s","xuexi"); }; printStr(); //定义带参数,有返回值的块 double (^hypt)(double ,double) = ^(double num1 ,double num2) { return num1 + num2; }; hypt(1,2); //将块赋给指定的块变量 带参数无返回值 在定义块后面是返回值的类型 void (^print)(NSString *); print = ^(NSString* info) { NSLog(@"info参数为:%@",info); }; print(@"nihao"); } return 0; }使用)block来访问内部变量,一般来说块是不允许访问内部变量的,因此可以用这个来代替 好像block不能用
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { int i = 20; void(^printStr)(void) = ^(void) { NSLog(@"%d",i); }; i = 10; printStr(); } return 0; }输出还是20
函数形参可变的方法 只需要在后加上...
-(void)setname:(NSstring *)name ...;在定义变量的时候有4个访问符
为@private @package @public @protected protected就是子类可以进行访问 package就是生成的同一镜像,也就是在同一个字目录下的文件可以进行访问,而子类就不允许访问
@property 和@synthesize 前者是自动生成get和set方法,后者是改变生成的变量名
@synthesize window = _window;表示生成的变量名是_window,而不是window
atomic 是指在多线程的情况下,避免对内部的成员变量进行修改,因为大部分的情况下都是但线程,因此使用nonatomic
copy是指当调用setter方法的时候,先将变量烤给一个副本,再赋值给原变量
strong和weak的区别 前者是当赋值给对象的时候,不会自动的回收,一个是会自动的回收
kvc 通过键值对来进行赋值
[user setValue:@"nihao",forKey:"name"];
还有一种是valueforKey
相关文章推荐
- 使用base64 加密在URL安全传递|url_safe|php
- 压力测试标准
- 原码, 反码和补码详解
- 字典树+AC自动机Hyper Prefix SetsUVA11488YTACM第一周E
- VRRP协议
- NYOJ 115 城市平乱【Dijkstra】
- IOS框架和服务
- 单例模式(Singleton Pattern)
- Qt之qSort
- 杭电-4545魔法串(LCS)
- String,StringBuffer与StringBuilder的区别??
- 猫都能学会的Unity3D Shader入门指南(一)
- Windows10如何安装IIS(互联网信息服务)
- django 快速搭建blog
- POJ - 1330 Nearest Common Ancestors(dfs+ST在线算法|LCA倍增法)
- 浅谈分布式计算的开发与实现(一)
- ActionBar的使用以及例子
- [LeetCode283]Move Zeroes
- C++ DirectX 游戏开发视频教程 01 资源下载链接
- Eclipse安装python插件