OC-学习Tips

(Objective-C)

  13,多参数方法:(函数名:f::)

  参数能够在 : 前面设置一个标签label,标签label也是函数名的一部分,方便阅读(不带标签实际上也有个匿名标签),第一个参数不能有标签,实际上函数名就是第一个参数的标签。

  14,OC不是严格的函数重载(和C++不同),主要看标签中,函数名和参数数量是否相同,不是看参数类型,如:

  - (int)g:(int)x;

  - (int)g:(flota)x;  //错误,方法冲突了

  - (int)g:(int)x:(int)y;  //正确,两个匿名标签

  - (int)g:(int)x andY:(int)y;  //正确,第二个标签为andY

  15,Message 消息机制(函数-消息-方法)

  发送消息:[obj message] 或 obj.message

  OC在.h文件中定义的所有函数都是public的,OC通过categories来实现函数私有化(或不在头文件中声明而去.m文件中直接实现)

  16,凡是以initXXXX开头的都是构造函数,如:

  - (id)init;

  - (Dog *)initWith;

  17,NSLog 和 printf 都会在console中输出显示结果,不同的是,前者传递进去的格式化字符是NSString的对象,而不是char * 这种字符串指针。

  18,OC中的类由接口和实现两部分组成:接口部分声明类中的实力变量和功能,接口部分实现接口中的功能。

  19,OC中,类的对象无法声明在栈中,只能声明在堆里。

  20,alloc / new ,一个对象在堆中开辟了空间,栈中有一个对象地址,先有类还是先有对象,看站的角度。

  21,类的封装,封装成员变量,成员方法,subclass基类

  22,构造方法:(类的封装)

  (1)在一般语言中,在创建对象时自动调用的方法称为构造方法。

  (2)在OC中,方式用init开头的成员方法都是构造方法。

  构造方法一般用于对象的初始化, 无参的构造方法返回值是当前对象的地址。

  23,构造函数和析构函数

  构造函数一般以initWithXXXX开头-初始化。

  析构函数dealloc:对象从内存中销毁前调用的函数。

  构造方法:

  - (id)init {

    if (self = [super init]) {

      //_FUNCTION_当前函数本身

    }

    return self;

  }

  - (void)dealloc {

    NSLog(@"name:%@ release",_name);

    [super dealloc];

  } //在对象完全消失的时候调用,对象销毁时,对象计数器=0。

   //不要人为的调用[xxx dealloc],应该用release销毁[xxx release],release使对象计数器-1,减到0,就会自动调用dealloc函数

  - (void)initialize; //类第一次实例化时调用,只调用一次

  24,self指针(super)(Java中的this、super):指向当前对象的指针,"+"类方法直接用类名调用(静态方法)

  25,类方法不能访问成员变量,类方法不能调用对象的方法。

  26,静态变量(全局、局部)

  未初始化前默认为0,作用域为当前文件,在全局数据区分配。

  静态函数:不能被其他文件所用,其他文件可以定义相同的函数名而不冲突。

  27,点语法  是编译器级别:

  dog.age = 200;  <=>  [dog setAge:200]; 

  int dogAge = dog.age;  -<=>  int dogAge = [dog age]; //具体调用了哪个方法编译器会自动判断

  28,@property int age  <=>  - (void)setAge:(int)newAge;- (int)age;   // .h文件中的声明

     @synthesize  <=>  - (void)setAge:(int)newAge{}  - (int)age{}   //.m文件中的实现

  29,age 与 self.age :在Dog类内部可以直接访问age变量,前者直接访问相当于访问age字段,后者是调用setter和getter函数。

  30,@property 参数(属性):readwrite(getter/setter,缺省),readonly(getter);

  assign(缺省),retain,copy -->表示属性如何存值;

  nonatomic -->表示考虑线程安全问题;

  getter=...;setter=...;,重置getter函数和setter函数。

  31,Category

  *** 实现继承之外的扩展方法的机制,只能扩展函数、消息,不能扩展字段、变量等。

  Category命名规范:要扩展类名+,扩展变量.[hm]

  比如:NSString+ReverseString.h    NSString+ReverseString.m

  -----

<think> 我们之前讨论了用户脚本中出现的语法错误(未闭合的单引号导致文件结束符错误),现在用户提供了新的引用,并希望了解grep命令在脚本中的使用情况、可能的问题及解决方案。结合用户之前遇到的语法错误,我们需要重点关注grep命令中引号使用不当可能导致的类似错误。 用户引用信息分析: 引用[1]:展示了split_tags函数与grep的管道使用,重点在引号内使用特殊字符(`<`)和变量传递。 引用[2]:说明grep的静默模式替代方案(重定向到/dev/null),并涉及输出重定向的语法(2>&1)。 引用[3]:列出Linux常用命令,与grep直接相关的是rpm查询命令,但可忽略。 用户需求:解决脚本中使用grep命令时出现的问题(尤其是引号错误和文件结尾错误)。 解决方案设计: 1. 分析grep命令中引号使用场景(单引号、双引号、无引号)及其与之前语法错误的关系。 2. 针对用户之前遇到的“未预期文件结束符”错误,重点检查grep模式字符串中的引号闭合问题。 3. 提供grep常见问题及解决方法,包括特殊字符处理、模式字符串跨行问题、引号嵌套等。 4. 结合错误案例给出修复示例。 具体回答结构: ### 解决Shell脚本中grep命令的引号错误 - 分析错误原因(引号不闭合如何影响整个脚本) - 常见问题场景及解决方案(含代码示例) - 调试技巧 ### 相关问题列表 生成3个相关问题 </think> ### 解决Shell脚本中grep命令的引号错误与文件结尾问题 在脚本中使用`grep`命令时(如`grep 'PT - SH - OC - OI083217' -Rn`),若引号使用不当会导致两类关键错误: 1. **未闭合引号错误**(寻找匹配的“'”时遇到未预期的文件结束符) 2. **文件结尾语法错误**(未预期的文件结尾) 这些问题通常由以下场景引发: #### 一、常见错误场景及解决方案 1. **模式字符串包含未转义的特殊字符** - **问题**:当搜索模式包含`$`、`!`或`'`时,未转义会破坏引号结构 ```bash # 错误示例($未转义) grep 'Version: $5.0' file.txt # $会被解释为变量 ``` - **修复方案**: - 使用单引号包裹整个模式并转义内部单引号 ```bash grep 'PT - SH - OC - OI083217'\''s log' -Rn # 用'\''转义单引号 ``` - 或改用双引号但转义特殊字符 ```bash grep "PT - SH - OC - OI083217\'s log" -Rn # 双引号内用\'转义 ``` 2. **跨行模式字符串未正确处理** - **问题**:长模式跨行书写时意外断开引号 ```bash # 错误示例(行尾\后多空格) grep 'PT - SH - OC \ - OI083217' -Rn # \后空格导致换行符未被转义 ``` - **修复方案**: - 使用`$'...'`格式支持转义换行符 ```bash grep $'PT - SH - OC\n- OI083217' -Rn # \n显式表示换行 ``` - 或用变量保存模式 ```bash pattern="PT - SH - OC - OI083217" grep "$pattern" -Rn ``` 3. **管道操作中grep输出未过滤** - **问题**:未处理空输出导致后续命令语法错误 ```bash # 错误示例(grep无匹配时rm收到空参数) grep "temp_file" *.log | xargs rm ``` - **修复方案**: - 通过重定向屏蔽错误(引用[2]方法) ```bash grep "louise" /etc/passwd > /dev/null 2>&1 && echo "Found" ``` - 或用`-q`抑制输出 ```bash if grep -q "critical_error" system.log; then alert_admin # 仅检查存在性[^1] fi ``` #### 二、调试技巧与预防措施 1. **语法验证工具** ```bash bash -n script.sh # 检查语法错误 shellcheck script.sh # 静态分析工具 ``` 2. **分阶段执行** ```bash # 先单独测试grep命令 pattern='PT - SH - OC - OI083217' grep "$pattern" -Rn /target_dir > result.tmp ``` 3. **引号使用规范** | 场景 | 推荐方案 | 示例 | |---------------------|-------------------|--------------------------| | 含变量 | 双引号 | `grep "$var" file` | | 含特殊字符 | 单引号+转义 | `grep '!\$#' file` | | 跨行长字符串 | 引号外拼接 | `'part1'"part2"` | > **关键原则**:当模式字符串包含连字符(`-`)、空格或斜杠时,必须用引号包裹整个模式,否则会被解析为命令选项或分隔符(如`PT`被误认为选项)[^1][^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值