ForgetSou | Blog

❤ 武统台湾 刻不容缓 ❤

0%

google gRPC在macOS中的简单使用

gRPC 官方文档中文版

1. 简述

A high-performance, open-source universal RPC framework

gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持。

gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。

RPC(Remote Procedure Call)远程过程调用,简单的理解是一个节点请求另一个节点提供的服务,使应用程序之间可以进行通信,而且也遵循service/client模型。在客户端调用service端提供的接口就像是调用本地函数一样,一般使用客户端快速能获取到服务器接口数据的时候,如:实时语音识别、翻译、语音合成等。

img

下面详解googleapis里的gRPC的使用

2. cocopods添加gRPC

阅读全文 »

一. 简述

拆分视图,在水平或垂直运行的线性堆栈中排列两个或多个视图的视图。

默认为水平方向

@interface NSSplitView : NSView

二. 官方属性方法

// 代理
@property (nullable, weak) id<NSSplitViewDelegate> delegate;

- (BOOL)splitView:(NSSplitView *)splitView canCollapseSubview:(NSView *)subview; // 是否允许用户可以折叠和展开指定子视图
- (void)splitView:(NSSplitView *)splitView resizeSubviewsWithOldSize:(NSSize)oldSize; // 子视图按自定义大小
- (void)splitViewWillResizeSubviews:(NSNotification *)notification;// 即将调整子视图大小时的通知委托
- (void)splitViewDidResizeSubviews:(NSNotification *)notification;// 调整子视图大小时的通知委托
- (BOOL)splitView:(NSSplitView *)splitView canCollapseSubview:(NSView *)subview;// 是否调整子视图的大小

- (CGFloat)splitView:(NSSplitView *)splitView constrainMinCoordinate:(CGFloat)proposedMinimumPosition ofSubviewAt:(NSInteger)dividerIndex; // 允许委托人在用户拖动分隔线时限制其最小坐标限制。
- (CGFloat)splitView:(NSSplitView *)splitView constrainMaxCoordinate:(CGFloat)proposedMaximumPosition ofSubviewAt:(NSInteger)dividerIndex; // 允许委托人在用户拖动分隔线时限制其最小坐标限制。
- (CGFloat)splitView:(NSSplitView *)splitView constrainSplitPosition:(CGFloat)proposedPosition ofSubviewAt:(NSInteger)dividerIndex; // 允许代表将分隔线限制在某些位置。

// 子视图
@property BOOL arrangesAllSubviews API_AVAILABLE(macos(10.11)); // 是否将所有子视图排列为拆分窗格
@property (readonly, copy) NSArray<__kindof NSView *> *arrangedSubviews API_AVAILABLE(macos(10.11)); // 拆分视图作为拆分窗格排列的视图数组
- (void)addArrangedSubview:(NSView *)view API_AVAILABLE(macos(10.11));// 添加拆分窗格
- (void)insertArrangedSubview:(NSView *)view atIndex:(NSInteger)index API_AVAILABLE(macos(10.11)); // 将拆分窗格插入到指定的索引处
- (void)removeArrangedSubview:(NSView *)view API_AVAILABLE(macos(10.11));// 删除已排列的拆分窗格
- (void)adjustSubviews; // 调整子视图大小
- (BOOL)isSubviewCollapsed:(NSView *)subview;// 返回是否处于折叠状态
- (NSLayoutPriority)holdingPriorityForSubviewAtIndex:(NSInteger)subviewIndex API_AVAILABLE(macos(10.8)); // 调整子视图大小时,返回宽度或高度的优先级
- (void)setHoldingPriority:(NSLayoutPriority)priority forSubviewAtIndex:(NSInteger)subviewIndex API_AVAILABLE(macos(10.8)); // 设置子视图优先级
@property (nullable, copy) NSSplitViewAutosaveName autosaveName API_AVAILABLE(macos(10.5)); // 系统自动保存拆分视图的分隔器配置时使用的名称。

// 拆分视图方向
@property (getter=isVertical) BOOL vertical; // 确定拆分视图分割线方向
@property NSSplitViewDividerStyle dividerStyle API_AVAILABLE(macos(10.5)); // 分割线样式,如下
typedef NS_ENUM(NSInteger, NSSplitViewDividerStyle) {
NSSplitViewDividerStyleThick = 1,
NSSplitViewDividerStyleThin = 2,
NSSplitViewDividerStylePaneSplitter API_AVAILABLE(macos(10.6)) = 3,
} API_AVAILABLE(macos(10.5));
@property (readonly, copy) NSColor *dividerColor API_AVAILABLE(macos(10.5)); // 分割线颜色
@property (readonly) CGFloat dividerThickness; // 分割线厚度
- (void)drawDividerInRect:(NSRect)rect; // 绘制分割线

// 限制拆分位置<左右(或上下)可滑动区域>
- (CGFloat)minPossiblePositionOfDividerAtIndex:(NSInteger)dividerIndex API_AVAILABLE(macos(10.5)); // 索引处最小位置
- (CGFloat)maxPossiblePositionOfDividerAtIndex:(NSInteger)dividerIndex API_AVAILABLE(macos(10.5)); // 索引处最大位置
- (void)setPosition:(CGFloat)position ofDividerAtIndex:(NSInteger)dividerIndex API_AVAILABLE(macos(10.5)); // 设置分割线在指定索引处的位置

三. 示例<代码>

使用代码创建NSSplitView,想要用Storyboard创建的自行研究,比较简单

- (NSSplitView *)splitView {
if (!_splitView) {
_splitView = [[NSSplitView alloc] initWithFrame:CGRectMake(10, 100, 600, 400)];
_splitView.delegate = self;
_splitView.vertical = YES;
_splitView.dividerStyle = NSSplitViewDividerStylePaneSplitter;
_splitView.wantsLayer = YES;
_splitView.layer.backgroundColor = NSColor.whiteColor.CGColor;
_splitView.toolTip = @"代码创建SplitView";
}
return _splitView;
}

- (void)viewDidLoad {
[super viewDidLoad];
// Do view setup here.
self.view.wantsLayer = YES;
self.view.layer.backgroundColor = NSColor.lightGrayColor.CGColor;

[self addSplitView];
}

- (void)addSplitView {
NSView *leftView = [[NSView alloc] initWithFrame:CGRectMake(0, 0, 100, 400)];
[self.splitView addArrangedSubview:leftView];

NSView *rightView = [[NSView alloc] initWithFrame:CGRectMake(100, 0, 500, 400)];
[self.splitView addArrangedSubview:rightView];

[self.view addSubview:self.splitView];
}

- (CGFloat)splitView:(NSSplitView *)splitView constrainMinCoordinate:(CGFloat)proposedMinimumPosition ofSubviewAt:(NSInteger)dividerIndex {
return 100;
}

- (CGFloat)splitView:(NSSplitView *)splitView constrainMaxCoordinate:(CGFloat)proposedMaximumPosition ofSubviewAt:(NSInteger)dividerIndex {
return 200;
}

/// 能否折叠子视图
- (BOOL)splitView:(NSSplitView *)splitView canCollapseSubview:(NSView *)subview {
return YES;
}
阅读全文 »