读书时间 2011/06/19 - 1 Objective-C ( lots of questions here 2011/12/21 )

华为OD机试真题 2026.11.4. 新系统 【河流水系流量评估】 华为OD机试真题 新系统【河流水系流量评估】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【河流水系流量评估】多语言题解。 阅读详情

 

《Objective-C基础教程》

 

0. 杂问杂记

 

Q:与C语言特性的关系,可直接使用所有C特性吗?

    A:Objective-C只是”增强"了C,所有保留了所有C的属性。 YES !

 

Q:向nil(空)对象发送消息,不会出现异常,表示停止操作命令???

    A: I guess 没有问题,这是和Java/C++最大不同之一。 2011/12/21

 

Q:委托与数据源到底是什么东东???

 

Q:感觉release使用很频繁?

Q:如果iPhone叫不使用autorlease,NSString一些对象如何管理的?

Q:setter方法中,使用“retain新对象,release老对象”感觉太复杂?

 

T:一篇关于NSObject的文章:http://www.cnblogs.com/yaski/archive/2009/04/13/1434308.html

 

Q:dealloc()方法总是会被自动调用,而init()不会?

Q:保留retain周期?

Q:如果代码完全不使用NSAutoreleasePool,是否会有问题?

 

1. Chap 9 内存管理

 

* 引用计数器

new/alloc/copy=1

retain+1

release-1

 

当计数为0,dealloc自动被调用(相当于C++的Deconstructor)

 

* NSAutoreleasePool

## 使用

int main(...) {

    NSAutoreleasePool *pool;

    pool = [[NSAutoreleasePool alloc] init];

    ...

    [pool release];

    ...

}

 

注:

#1 pool以全局stack方式管理,所有autorelease都针对顶部pool进行。

 

* set方法:内存管理实例

-(void) setEngine: (Engine *)newEngine {

    [newEngine retain];

    [engine release];

    engine=newEneing;

}

注:retain新对象,释放老对象。

Q:这样做,对于普通的setter方法实在太复杂???

   A:所以出现了@property

 

 

* 内存管理三原则

#1 new/aclloc/copy获取对象,必须在自己的代码中使用release/autorelease进行处理

#2 其它方式获得的对象,可以假设:其引用计数为1,并且已经加入autorelease pool

#3 retain/release使用次数必须对等?

 

注1:总之,自己生成的新对象自己管理,别的对象假设已经被管理好了。

注2:特别注意对象之间不要循环“引用”,否则,两个对象永远不释放。一般原则是Owner引用其它对象,而不是相反。

 

 

* 垃圾回收GC:类似于Java中的GC

-fobjecc -gc

 

注1:iPhone开发需要谨慎使用autorelease

注2:iPhone中不使用GC ?

 

2. chap 10 对象初始化

 

* 对象生成

分两步:分配内存,初始化

两种方式:

[Class new]

[[Class alloc] init]]

                        ^ 此init定义在NSObject中,对相关内存区域清0

注1:通常使用init方式,原因目前暂不明白?

       Q:WHY ? 2011/12/21

 

注2:init()是一普通函数,不会自动被调用,这和Java/C++的构造函数不同!

        A:直接使用[ClassName new]的时候,init()不会被调用,对吧? 2011/12/21

 

* init()函数

-(id)init {

    if(self=[super init]) {

      ...

    }

    return(self);

}

 

3. Chap 11. 特性 property

 

* 意图

以预编译的形式来自动生成setter/getter函数,并在需要的时候处理对象的retain/release问题

   YES! That's very useful !!!

 

Q:可以自定义其实现方式?

 

* 定义与实现

@property(readwrite, copy) NSString *shoeSize;

@synthesize shoeSize;

 

注:变量名与property名可以不同。

 

* 点表达式:类似Java,但一些细节上不完全相同。

只是对相关方法调用的一种“快捷”书写方式

例:

self.name=@"Car"; =====> [self setName: @"Car"];

注1:若setName不存在,则错误

注2:name并不是一个类中的属性,而是一个property,所以,类中的真正属性不一定是name

 

* 特性property本身的属性

Q:对象内存管理(retain, assign, copy)

是否只读(readwrite, readonly)

 

4. Chap 12 类别Category

 

* 目的

给类“动态”增加新的功能,不过不能增加新属性

 

* 声明与使用

@interface NSString(NumberConvenience)

                        ^ 类名          ^ Category名  

-(NSNumber *)lengthAsNumber;

 

@end

 

@Implementation NSString(NumberConvenience)

-(NSNumber *) lengthAsNumber {

   unsigned int length = [self length];

   return ([NSNumber numberWithUnsignedInt: length]);

}

 

注:类别影响是全局性的,上例中所有NSString都可以处理lengthAsNumber()消息。

 

* 类别应用

# 将类实现分散到不同文件,便于控制

# 可为任意类增加新的接口,实现所谓”非正式协议“ protocol

 

* 委托与类别

Q:P183 ???

 

5. Chap 13 协议 protocol

 

* 概念

就是Java的接口(interface)

与Java不同的是,Objective-C 2.0有@optional与@required之分,增加了一些灵活性。

 

* 申明与使用

@protocol NSCopying

-(id)copyWithZone: (NSZone *)zone;

@end

 

@interface Car: NSObject <NSCopying, ...>

{

  ...

}

@end

 

* 实例:实现CarParts的copy功能

* 协议与数据类型

-(void) setObjectValue: (id<NSCopying>) obj;

                                             ^ 若对象未实现NSCopying,则编译出错。Q:神马东东?2011/12/21

 

Q:鼓励面向protocol编程吗?

 

 

6. Chap 15 文件加载与保存 Q:需要好好温习 2011/12/21

 

* 属性列表对象plist

NSArray, NSDictionary, NSString, NSNumber, NSDate, NSData

 

*保存与加载

[nsdata writeToFile:@"myfile" automically:YES];

 

* 自定义序列化与反序列化

@protocol NSCoding

-(void)encodeWithCoder: (NSCoder *)aCoder;

-(void)initWithCoder:(NSCoder *)aDecoder;

@end // NSCoding

 

* 实现类

NSKeyedArchiver

NSKeyedUnarchiver

 

* 保存实例:

 

@interface ArchievableThing : NSObject <NSCoding>

@end

 

ArchievableThing * thing ...

 

NSData *freezeDired;

freezeDired = [NSKeyedArchiver archiverdDataWithRootObject: thing];

 

[freezeDired writeToFile: @"myFile" automically:YES];

 

注:将对象变成NSData,再使用NSData的函数保存

 

 

7. 附录:从其它语言转向Objective-C

 

* C语言

Objective-C=old C+OO feature

可以使用标准C的所有库,如malloc()/free(), fopen/fclose()等等

 

* C++语言

#1 C++专属特性

多重继承、命名空间、运算符重载、模板、类变量、抽象类、标准模板库

某些特性Objective-C可模拟

 

Objective-C有以下特性极有用:

    @property

    @protocol

    catogory

 

#2 C++虚拟表 vs. Objective-C动态语言特性

C++

    VTable,执行快,但因此缺乏动态语言的特性

Objective-C:

    任意对象可以成为其它对象的数据源或委托Delegate?,缺乏类型安全性

    有元数据,可使用反射

    所有对象都动态分配(heap中),不存在stack中的对象

                                                                       ^ 那在stack中还有什么?只有primitive变量和参数? 2011/12/21

    没有临时对象的创建与销毁,也不存在对象自动转换

    可向nil对象发送消息,不必检查NULL(但结果呢?)
    不存在访问控制概念,所有方法都能被其它对象访问,即使不在定义中申明

    不存在类变量,但可通过文件范围全局变量模拟

 

* Objective-C++

混合C++与Objective-C特性,如使用C++的效率与类型安全

 

* Java语言

Java

    interface

    类变量

    final阻止改变

    使用异常

Objective-C

    @protocol

    无类变量

    允许运行时添加方法

    使用-1或errorno来处理异,也使用类似于C++的异常机制

 

 

 

 

 

 

 

 

 

 

【高级-RAG-优化方法】 本文介绍了两种优化RAG(检索增强生成)系统的高级方法。第一部分介绍KnowFlow项目,它采用父子分块技术,将文档分为父分块(800-1500字符)和子分块(200-400字符),通过精确匹配子分块再返回父分块内容来保证搜索精确性和上下文完整性。第二部分探讨Milvus的多种增强技术,包括查询增强(如假设问题生成、回溯提示)、索引增强(自动合并块、分层索引)、检索器增强(句子窗口检索、元数据过滤)、生成器增强(提示压缩、块排序)以及管道增强(自我反省、代理查询路由)。这些方法共同提升了RAG系统的检索效率 阅读详情

相关推荐

自动驾驶车辆纵向控制实战:基于CARLA与ROS2的PID算法实现

本文详细介绍了基于CARLA与ROS2的自动驾驶车辆纵向控制实战,重点讲解了PID算法的实现与应用。通过搭建仿真环境、实现定速巡航和自适应巡航功能,帮助开发者掌握自动驾驶核心技术。文章还分享了系统集成、仿真验证及常见问题的调试技巧,为自动驾驶开发提供实用指导。

weixin_33728708的博客 354

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 44

达梦7实时主备集群

达梦7实时主备配置实时主备数据环境说明配置主库配置 dm.ini配置dmmal.ini配置dmarch.ini配置dmwatcher.ini配置dmwatcher.ini以mount方式启动主库设置OGUID修改数据库为primary模式配置备库 在服务器部署过程中,通常搭建有数据库主备集群,用于防备数据库服务器产生问题影响数据正常,在此,我们分享一下在虚拟机环境中模拟搭建实时主备的数据守护模式。 在搭建环境之前,需用户确认主备DM7的数据库已安装完成,且版本一致,同时还应注意各实例所在主机的操作系统位数、

g360382的博客 1022

Spring AI + GPT-5.5 + Ollama 配置教程:Base URL、超时与流式调用

由于不同 Spring AI、Spring Boot 小版本之间仍可能存在差异,创建项目时应检查 Spring Initializr、Spring AI BOM 和官方兼容矩阵,不要直接复制旧教程中的 Starter 名称和版本号。多人项目最好隔离不同客户端,并在脱敏前提下记录最终 URL、状态码、请求耗时、请求 ID 和模型 ID。Spring AI 接入模型 API,至少要同时确认 Starter、Base URL、请求路径、API Key、模型 ID、连接超时、读取超时和流式客户端这 8 项。

2601_95893075的博客 225

【破局之道】LangChain4j 0.31.0 + Java 8 + Spring Boot:在“过时”环境中构建本地大模型应用的实战指南

本文为使用Java 8和Spring Boot等“过时”技术栈的团队提供了构建本地大模型应用的实战指南。通过采用LangChain4j 0.31.0这一兼容版本,结合Ollama部署本地大模型,开发者无需升级JDK即可在现有项目中快速集成AI能力,实现智能问答、文档摘要等功能,为传统项目注入创新活力。

t4y5u6i7o的博客 557

STM32F407 BootLoader实战:从零搭建到OTA升级(附完整源码)

本文详细介绍了为STM32F407微控制器从零搭建BootLoader并实现稳定OTA升级的完整实战指南。内容涵盖Flash分区规划、链接脚本配置、核心跳转逻辑、中断向量表重定向、可靠的升级流程设计,并深入探讨了双备份与回滚机制以提升工业级可靠性。文章提供了可直接使用的代码框架,并分享了关键调试技巧,帮助开发者快速掌握STM32远程固件更新技术。

weixin_29192211的博客 439

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 330

基于R语言的DICE模型实践技术应用;预测不同减排路径下的经济增长、碳排放量、气候变化程度以及社会福利变化

DICE模型是一个动态综合气候经济模型,由诺贝尔经济学奖得主William Nordhaus开发,用于评估气候变化对经济的影响以及不同减排政策的经济成本和效益。以下是一个关于DICE模型在气候变化影响评估中的实际应用案例,结合R语言代码进行讲解。

KY_chenzhao的博客 866

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 118

转录组数据去批次方法整理(combat,combat-seq,removeBatchEffect)

正是因为这些非生物学的因素存在就有可能会导致我们的结果偏离真实的情况,那么实际分析的过程中研究者应当评估是否存在批次效应,并决定是否要进行去批次处理。批次效应是指样本在不同批次处理及测量的情况下引入与生物学情况不相关的技术误差,比如不同试剂耗材,不同操作者,不同的实验时间等。combat函数是基于贝叶斯框架下的调整数据批次效应的函数,主要适用于已经被过滤和标准化后的数据(combat-seq函数是基于二项回归分布下的调整数据批次效应的函数,主要适用于。值得注意的是,即使使用了所谓的去批次效应的工具,

zfyyzhys的博客 7862

RNA-seq分析:Step4(比对)

预处理之后的fastq文件,可以使用HISAT2软件将reads比对至参考基因组上。HISAT2软件将reads比对至参考基因组上的步骤如下:1. 对参考基因组进行建索引。对参考基因组进行预处理,生成索引文件,包括基因组序列的FM索引和SA索引。2. 将原始的reads进行预处理。包括去除接头序列、去除低质量的碱基,以及进行过滤,得到质量较高的、可靠的reads。3. 利用建立的FM索引和SA索引,将处理后的reads与参考基因组进行比对。首先,通过FM索引,快速找到与reads匹配的可能位置;

沉香best的博客 2599

Spring Boot 数据源与 MyBatis(-Plus) 自定义配置详解

本文详解 Spring Boot 中单数据源环境下 HikariCP 与 MyBatis-Plus 的自定义配置。通过手动声明 SqlSessionFactory,实现下划线转驼峰、日志输出、一级缓存策略等精细化控制。结合 HikariCP 核心参数调优(如最大连接数、连接生命周期),确保高性能与稳定性。适用于仅需访问单一数据库的场景,避免多数据源复杂性,兼顾性能与可维护性。

BADAO_LIUMANG_QIZHI的博客 196

微信小程序:errno: 1500104, errCode: 10008, errMsg: “writeBLECharacteristicValue:fail:system error, status

微信小程序errno: 1500104, errCode: 10008, errMsg: "writeBLECharacteristicValue:fail:system error, status: UNKNOWN (239)"微信小程序调用蓝牙API,wx.writeBLECharacteristicValue()报错,微信小程序蓝牙写入错误,在开发uniapp微信小程序蓝牙通信功能时报错,蓝牙开发设备控制核心api,微信小程序调用蓝牙API “wx.writeBLECharacteristicValu

✅ 精选推荐文章 3929

LeetCode Hot 100 二叉树专题(二)3 题(Java)

本篇文章共 3 题:543. 二叉树的直径、102. 二叉树的层序遍历、108. 将有序数组转换为二叉搜索树。 每道题都统一按「① 题目分析 & 解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结」的顺序组织;代码使用 Java 编写,节点定义沿用 LeetCode 默认的 TreeNode。

2401_88612756的博客 365

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Decorator

TaskDecorator 是异步场景下"跨线程传递上下文"的标准方案,主要用于传递 MDC、用户信息、数据源路由等上下文数据,核心价值是让异步任务的日志链路不中断、业务上下文不丢失。TaskDecorator 是 Spring 提供的一个钩子接口,用于在异步任务执行前对 Runnable 进行包装,常用于跨线程传递上下文。如果你在项目中遇到具体的异步上下文传递问题,可以把代码贴出来,我帮你给出最合适的 Decorator 方案 👍。✅ 核心能力:在线程切换时,把"父线程的上下文"搬到"子线程"

wlwork66的博客 104

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

JDK 下载安装:装完 Java 提示「不是内部或外部命令」?环境变量没配

JDK 是写 Java 程序必须装的东西。它包含运行 Java 的虚拟机(JRE)和编译 Java 的编译器(javac)——装了它,能跑、.java文件能编译成可执行程序。免费,学习和小规模生产都不花钱。

科小怪的博客 627

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C++ 多态详解:作用、原理与实战用法

多态是C++面向对象的核心特性,通过虚函数实现运行期动态绑定,使同一接口在不同对象上表现出不同行为。其核心作用包括统一接口、提升可扩展性、降低耦合、支持运行时分派与批量处理。实现依赖虚函数表(vtable)和虚指针(vptr),需注意虚析构函数、对象切片等陷阱。相比编译期多态(模板),运行期多态灵活性高但有调用开销。合理结合两者,可兼顾代码的灵活性与性能,是构建可扩展、低耦合系统的关键。

2402_85743155的博客 377

java框架大全

java框架大全

qq_39326137的博客 183

Java 多态 学习笔记

多态是面向对象编程的重要特性,指同一操作作用于不同对象时产生不同行为。其核心在于“父类引用指向子类对象”,结合方法重写实现运行时动态绑定。多态使代码更灵活、可扩展,如用Person p = new Student();统一处理各类人员注册,无需修改调用逻辑。但多态无法直接调用子类特有方法,需通过instanceof判断并强制转换。编译时看左边(类型),运行时看右边(实际对象),实现解耦与维护便利。

AA_AA114514的博客 355

SecureRandom做随机源,这个Java随机字符串工具类有3个方法

本文分享一款JDK17环境下的Java随机字符串工具类,内置3个开箱即用的方法,全部采用SecureRandom加密安全随机源,不存在弱随机、可预测、取模偏差等问题。工具类支持默认62字符集随机串、纯数字随机串、自定义字符集随机串三种生成模式,支持Unicode码点级别的字符集处理,兼容Emoji等增补字符,边界处理严格,异常信息明确,适合验证码、邀请码、盐值、随机口令、短链码等场景,源码可直接复制使用。

Java后端 | AI智能体应用实战派 | 电脑技能行家 297

Java实现批量线段相交检测(跨积判定+扫描线优化与踩坑复盘)

【代码】Java实现批量线段相交检测(跨积判定+扫描线优化与踩坑复盘)

m0_64476639的博客 326

ubuntu安装hadoop系统

本文详细介绍了基于VMware克隆虚拟机搭建三节点Hadoop分布式集群的全过程:使用同一Ubuntu镜像克隆出master、worker1、worker2三台虚拟机,依次配置主机名、固定IP(如192.168.82.10/11/12)、SSH服务及免密登录,确保节点间网络互通。随后安装Java,下载配置Hadoop并分发至各节点,最终初始化启动集群,验证其存储与计算功能,实现高效的大数据环境部署。

qq_43592674的博客 326

Agent 状态栏在上下文中的具体位置

Agent状态栏以user角色消息形式追加至上下文末尾,而非修改system消息,避免破坏KVCache。此举仅为API技术实现,内容由框架自动生成,非真实用户输入,通过<agent_status>标签标识,确保模型获取最新状态且不影响缓存。该设计遵循“动态信息追加、静态信息固定”原则,实现高效、低延迟的状态传递。

lj1109053360的专栏 72

Mac上装了最新版本的Android Studio,但是没找到jdk的设置选项也没找到jbr的目录

新版Android Studio(2025.3.1+)因三项变更导致常见问题:一、JDK设置移至“DaemonJVM criteria”,新项目默认自动探测或下载JDK;二、JBR目录改名为带版本号的jbr-21等,需进入.app/Contents/查看,或通过About窗口确认运行时;三、命令行缺adb因platform-tools未加入PATH,需在SDK Manager中勾选并配置~/.zshrc中的ANDROID_HOME及PATH。重装或清理残留可解决缺失问题,切勿手动设JAVA_HOME或安装冲

Programming is a highly artistic endeavor 341

Spring事务和事务传播机制

3. 可重复读(REPEATABLE READ): 事务不会读到其他事务对已有数据的修改, 即使其他事务已提交. 也就可以确保同⼀事务多次查询的结果⼀致, 但是其他事务新插⼊的数据, 是可以感知到的. 这也就引发了幻读问题. 可重复读, 是 MySQL 的默认事务隔离级别.p1事务可以认为是⽗事务, 嵌套事务是⼦事务. ⽗事务出现异常, ⼦事务也会回滚, ⼦事务出现异常, 如果不进⾏处理, 也会导致⽗事务回滚.

txxzjmzlh的博客 204

Java Arrays.asList 常见坑详解|UnsupportedOperationException、数组联动、基本类型 bug

解析 Arrays.asList 常见开发陷阱,演示 UnsupportedOperationException、底层数组引用共享、基本类型数组问题,区分 Arrays 内部 ArrayList 与 java.util.ArrayList,给出数组转 List 的各种场景正确代码。

weixin_42617033的博客 450
上一篇: 读书时间 2011/06/17 - 2 Objective-C
下一篇: UC故事2011/06/22 - 1
printf1998
博客等级 码龄16年 14粉丝 196原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值