熟悉Objective-C <一>

MARK: - 了解Objective-C 语言起源

Objective-C 为C语言添加了 面向对象 的的特性
Objective-C是一门 动态绑定 的消息结构,也就是说运行时才会检查对象类型。接到消息之后,究竟应该执行何种代码,由运行期环境而非编译器来决定

//总结:
//1、对象所占用的内存 总是分配在 堆空间 中
//2、对象是分配在栈上的
//3、class 是引用类型、struct是值类型()
- (void)test01
{
    // 1、someString变量 指向 NSString的指针,对象所占用的内存 总是分配在 堆空间 中
    NSString *someString = @"the string";
    
    // 2、anotherString变量 指向 同一块地址,并不拷贝改对象,只是这两个变量会同时指向此对象
    NSString *anotherString = someString;  //*** 浅拷贝 ***
    
    NSLog(@"someString 内存地址:%p,someString = %@",someString,someString);
    //0x10e1f2088 the string
    
    NSLog(@"anotherString 内存地址:%p,anotherString = %@",anotherString,anotherString);
    //0x10e1f2088 the string
    
    //  3、
    someString = @"the string is change";
    
    NSLog(@"someString 内存地址:%p,someString = %@",someString,someString);
    //0x10e1f20e8 the string is change  //内存地址不一样,字面量重新创建一个字符串对象
    
    NSLog(@"anotherString 内存地址:%p,anotherString = %@",anotherString,anotherString);
    //0x10e1f2088 the string

    
    //**************
    
    MObject *m1 = [[MObject alloc] init];
    m1.name = @"jack";
    
    MObject *m2 = m1;
    NSLog(@"m1 的内存地址:%@,m1 = %@",m1,m1.name);    //0x6000000076f0   jack
    NSLog(@"m2 的内存地址:%@,m2 = %@",m2,m2.name);    //0x6000000076f0   jack

    m2.name = @"rose";
    NSLog(@"m1 的内存地址:%@,m1 = %@",m1,m1.name);    //0x6000000076f0   rose
    NSLog(@"m2 的内存地址:%@,m2 = %@",m2,m2.name);    //0x6000000076f0   rose

}
MARK: - 了解Objective-C 命名规范
// 用系统方法举例子
- (void)example
{
    
    // 驼峰命名法
    // 以小写字母开头,其后每个单词首字母大写,而且前面通常还有两三那个前缀字母(自定义方法的生活,可以用于区别与系统的方法)
    // 但方法名不能太长,必须言简意赅
    NSString *text = @"this is text";
    NSString *newText = [text stringByReplacingOccurrencesOfString:@"text"
                                                        withString:@"textString"];
    NSLog(@"newText = %@",newText);
}

- (void)majqNamedForMethodTest
{
    // 1、用于创建新的MPeson对象,方法名清晰的描述了返回值的类型
    MPeson *p = [MPeson person];
    
    // 获取p 的名字,这个方法只有一个词,实际上name 也是一个字符串属性
    // 如果此方法命名StringName 就不好,string 一词多余
    NSString *temVar = [p name];
    NSLog(@"temVar = %@",temVar);

    // 2、如果方法的返回值是新创建的,那么方法名的首个单词应该是返回值的类型,除非前面有修饰语,但是string 不能简写成str
    [p stringBookNameByShoping];
    
    // 3、应该把参数类型的名词放在参数前面
    [p runWithFriend:nil name:@"jack"];
    
    // 4、BOOl 属性应加is前缀,如果某方法返回非属性的Bool值,那么应该根据其功能,选用has或者is 当前缀
    [p hasPet];
    BOOL temVar01 = [p isMillionaire];
    BOOL temVar02 = p.isMillionaire;
    NSLog(@"temVar01 = %d temVar02 = %d",temVar01,temVar02);

    NSString *text = @"http://www.baidu.com";
    [text hasPrefix:@"http"];
    [text isEqualToString:@"http://www.taobao.com"];
    
}

- (void)majqNamedForClasstest
{
    // 1、应该为类与协议的名称加上前缀,以避免命名空间(nameSpace)冲突
    // MPeson、NSArray、NSMutableArray
    
    
    // 2、向 命名方法那么驼峰命名
    
    // 3、*****命名方式应该协调一致*****
    // 3.1 如果要从其他框架中继承子类,那么务必遵守其命名管理
    // UIView  -->  MView
    
    // 3.2 如果创建自定义的委托协议,则其名字中应该包含委托发起方的名称,后面再跟上 Delegate
}
MARK: - 在类的头文件中尽量少引用其他头文件

查看下面代码:

#import <Foundation/Foundation.h>

// 注意:***
#import "MajqNetworkFetcher.h"
// 注意:***

@interface MObject : NSObject

@property(nonatomic,copy)NSString *name;

@property(nonatomic,strong)MajqNetworkFetcher *fetcher;

@end

// 注意:***
// MObject 添加属性fetcher时,常见的方法就是导入#import "MajqNetworkFetcher.h" 头问题
// 这种方法可行,但是不够优雅
// 因为编译的时候,MObject 不需要知道MajqNetworkFetcher类的全部细节,只需要知道有一个类名叫MajqNetworkFetcher 就好
// 所以,有个办法告诉编译器:@class MajqNetworkFetcher;
// 这叫 "向前声明"

#import <Foundation/Foundation.h>

// 注意:***
// MObject 添加属性fetcher时,常见的方法就是导入#import "MajqNetworkFetcher.h" 头问题
// 这种方法可行,但是不够优雅
// 因为编译的时候,MObject 不需要知道MajqNetworkFetcher类的全部细节,只需要知道有一个类名叫MajqNetworkFetcher 就好
// 所以,有个办法告诉编译器:@class MajqNetworkFetcher;
// 这叫 "向前声明"
#import "MajqNetworkFetcher.h"
@class MajqNetworkFetcher;
// 注意:***

@interface MObject : NSObject

@property(nonatomic,copy)NSString *name;

@property(nonatomic,strong)MajqNetworkFetcher *fetcher;

@end
这样做的好处就是:

将头文件的时机尽量延后,只在确有需要的时候引入,这样做可以:
减少类的使用者所需引入的头文件数量,从而减少 编译时间

在实际开发过程中,我们可以这样去处理,但是,这样做也许会遇到一些问题:
比如说: @protocol

要声明你写的类遵守某个 协议@protocol,那么该协议必须要有完整的定义,且不能使用 向前声明 (向前声明@class 只能告诉编译器有某个协议,而此时编译器却要知道该协议中定义的方法)

那么怎么做呢??

通常做法是:

#import "MajqDataModel.h"
// 导入头文件
#import "MajqNetworkFetcher.h"
@interface MajqDataModel () <MajqNetworkFetcherDelegate>

@end

@implementation MajqDataModel

上面这种做法 没毛病,导入头文件 #import "MajqNetworkFetcher.h" 这个是在所难免的;
鉴于此,最好把协议 单独放在一个头文件中;
而要是把 MajqNetworkFetcherDelegate 放在 #import "MajqNetworkFetcher.h" 中,则只有引入头文件 #import "MajqNetworkFetcher.h" ,那么就会引入该头文件的所以内容

当然 这样做 有时候还是会有缺陷的,比如 委托协议,协议只有与接受协议委托的类放在一起定义才有意义
这个就不做具体的介绍,有时间在补充...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容